जावास्क्रिप्ट के साथ GetElementById के बजाय GetElementByClass कैसे प्राप्त करें?


91

मैं प्रत्येक DIV के वर्ग के आधार पर एक वेबसाइट पर कुछ DIV तत्वों की दृश्यता को टॉगल करने की कोशिश कर रहा हूं। मैं उन्हें टॉगल करने के लिए एक मूल जावास्क्रिप्ट स्निपेट का उपयोग कर रहा हूं। समस्या यह है कि स्क्रिप्ट केवल उपयोग करती है getElementById, जैसा getElementByClassकि जावास्क्रिप्ट में समर्थित नहीं है। और दुर्भाग्यवश मुझे DIV का नाम लेने के लिए क्लास और आईडी का उपयोग नहीं करना पड़ता है क्योंकि DIV नाम गतिशील रूप से मेरे XSLT स्टाइलशीट द्वारा कुछ श्रेणी नामों का उपयोग करके उत्पन्न किया जाता है।

मुझे पता है कि कुछ ब्राउज़र अब समर्थन करते हैं getElementByClass, लेकिन चूंकि इंटरनेट एक्सप्लोरर मैं उस मार्ग पर नहीं जाना चाहता।

मुझे कक्षा द्वारा तत्वों को प्राप्त करने के लिए कार्यों का उपयोग करके स्क्रिप्ट मिली है (जैसे कि इस पृष्ठ पर # 8: http://www.dustindiaz.com/top-ten-javascript/ ), लेकिन मैं यह पता नहीं लगा सकता कि उन्हें कैसे एकीकृत किया जाए मेरे टॉगल स्क्रिप्ट के साथ।

यहाँ HTML कोड है। XML / XSLT के साथ पेज लोड होने के बाद से DIV खुद गायब हैं।

मुख्य प्रश्न: मुझे आईडी द्वारा तत्व प्राप्त करने के बजाय कक्षा द्वारा तत्व प्राप्त करने के लिए नीचे टॉगल स्क्रिप्ट कैसे मिलेगी?

<html>

<head>

<!--This is the TOGGLE script-->
<script type="text/javascript">
<!--
    function toggle_visibility(id) {
       var e = document.getElementById(id);
       if(e.style.display == 'block')
          e.style.display = 'none';
       else
          e.style.display = 'block';
    }
//-->
</script>

</head>

<!--the XML/XSLT page contents will be loaded here, with DIVs named by Class separating dozens of li's-->

<a href="#" onclick="toggle_visibility('class1');">Click here to toggle visibility of class 1 objects</a>

<a href="#" onclick="toggle_visibility('class2');">Click here to toggle visibility of class 2 objects</a>

</body>
</html>

3
मैं jQuery का उपयोग क्यों नहीं कर रहा हूँ? मैंने jQuery का उपयोग करने के @ जोनाथन सैम्पसन के सुझाव को लिया, और यह काम करता है! (सीएमएस का जवाब था कि मुझे लगा कि मैं तलाश कर रहा हूं, लेकिन यह काम नहीं कर सका) मैंने प्रत्येक लिंक को एक आईडी दिया है, और jQuery के साथ मैं परिभाषित कर सकता हूं कि कौन सी कक्षाएं दिखाती हैं और जब आप एक पर क्लिक करते हैं तो कौन सी कक्षाएं छिपी होती हैं विशेष लिंक महान! यह समाधान सही होने के लिए बहुत अच्छा लगता है। jQuery सच होना बहुत अच्छा लगता है। JQuery का उपयोग करने की कमियां क्या हैं? नौसिखिए के रूप में, मैं jQuery के बजाय जावास्क्रिप्ट का उपयोग क्यों करूंगा?
एलन

जवाबों:


77

आधुनिक ब्राउज़रों के लिए समर्थन है document.getElementsByClassName। आप पूर्ण विराम देख सकते हैं कि कौन से विक्रेता कैनुएज़ में यह कार्यक्षमता प्रदान करते हैं । यदि आप पुराने ब्राउज़रों में समर्थन का विस्तार करना चाहते हैं, तो आप चयनकर्ता इंजन पर विचार करना चाह सकते हैं जैसे कि jQuery या पॉलीफ़िल।

पुराना उत्तर

आप jQuery में जांचना चाहते हैं , जो निम्नलिखित की अनुमति देगा:

$(".classname").hide(); // hides everything with class 'classname'

Google एक होस्ट किया गया jQuery स्रोत-फ़ाइल प्रदान करता है, जिससे आप इसे संदर्भित कर सकते हैं और क्षणों में ऊपर-नीचे हो सकते हैं। अपने पृष्ठ में निम्नलिखित शामिल करें:

<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.3.2/jquery.min.js"></script>
<script type="text/javascript">
  $(function(){
    $(".classname").hide();
  });
</script>

1
हालांकि अच्छा है, Google होस्ट किया गया jQuery केवल सबसे सरल चीजों के लिए उपयोगी है, क्योंकि अधिकांश आधुनिक ब्राउज़रों द्वारा क्रॉस-साइट स्क्रिप्टिंग सुरक्षा को लागू किया गया है।
पाउलो सांतोस

2
आप jQuery.com से स्रोत फ़ाइल भी डाउनलोड कर सकते हैं और इसे स्थानीय रूप से संदर्भित कर सकते हैं।
सैम्पसन

21
@Paulo: <script>टैग के लिए क्रॉस-साइट स्क्रिप्टिंग लागू नहीं है । Google होस्ट किया गया jQuery विशेष रूप से उत्पादन वेबसाइटों (CDN के रूप में) के लिए डिज़ाइन किया गया है। यदि आपकी साइट https है, तो सुनिश्चित करें कि मिश्रित सामग्री चेतावनी से बचने के लिए आप https संस्करण का उपयोग करें।
चेतन एस

3
वास्तव में, <script>टैग इंजेक्शन क्रॉस-साइट JSONP अनुरोधों का आधार है।
चेतन एस

2
पाउलो, आपको एहसास है कि एक बार जब आप <स्क्रिप्ट> टैग के साथ jQuery को शामिल करते हैं, तो कोई क्रॉस-साइट प्रतिबंध नहीं हैं?
डार्क फाल्कन

88

getElementsByClassNameविधि अब देशी रूप फायरफॉक्स, सफारी, क्रोम, IE और ओपेरा के नवीनतम संस्करणों के द्वारा समर्थित है, तो आप एक समारोह की जाँच करने के कर सकता है, तो एक देशी कार्यान्वयन उपलब्ध है, अन्यथा डस्टिन डियाज़ विधि का उपयोग करें:

function getElementsByClassName(node,classname) {
  if (node.getElementsByClassName) { // use native implementation if available
    return node.getElementsByClassName(classname);
  } else {
    return (function getElementsByClass(searchClass,node) {
        if ( node == null )
          node = document;
        var classElements = [],
            els = node.getElementsByTagName("*"),
            elsLen = els.length,
            pattern = new RegExp("(^|\\s)"+searchClass+"(\\s|$)"), i, j;

        for (i = 0, j = 0; i < elsLen; i++) {
          if ( pattern.test(els[i].className) ) {
              classElements[j] = els[i];
              j++;
          }
        }
        return classElements;
    })(classname, node);
  }
}

उपयोग:

function toggle_visibility(className) {
   var elements = getElementsByClassName(document, className),
       n = elements.length;
   for (var i = 0; i < n; i++) {
     var e = elements[i];

     if(e.style.display == 'block') {
       e.style.display = 'none';
     } else {
       e.style.display = 'block';
     }
  }
}

2
आप केवल सादे कोड के बजाय उस आंतरिक फ़ंक्शन का उपयोग क्यों करते हैं?
टॉम ज़ातो - मोनिका डे

-1 उदाहरण उदाहरण के लिए यह मानते हुए कि स्क्रीन पर सभी तत्वों में ब्लॉक डिस्प्ले है। Toggle_visibility में, यदि e एक <span> है, तो इसे 'इनलाइन' नहीं 'ब्लॉक' होना चाहिए। एक और अधिक मजबूत समाधान सीएसएस वर्ग को परिभाषित करने के लिए है:। अदृश्य {प्रदर्शन: कोई नहीं! महत्वपूर्ण} और तत्वों से उस वर्ग को असाइन और अनसाइन करने के लिए जावास्क्रिप्ट (या jQuery) का उपयोग करें
जॉन मेयर

6
document.getElementsByClassName('CLASSNAME')[0].style.display = 'none';

GetElementsByClassName का उपयोग करके Acyually, यह कई वर्गों की एक सरणी देता है। क्योंकि एक ही HTML नाम से एक ही वर्ग का नाम एक से अधिक उदाहरणों में उपयोग किया जा सकता है। हम अपने मामले में जिस वर्ग की ज़रूरत है, उसे लक्षित करने के लिए हम ऐरे एलिमेंट आईडी का उपयोग करते हैं, यह दिए गए वर्ग के नाम का पहला उदाहरण है। मैंने जो प्रयोग किया है [0]



2

CMS के उत्तर में जोड़ना , यह toggle_visibilityमेरे द्वारा उपयोग किए गए स्वयं के लिए अधिक सामान्य दृष्टिकोण है :

function toggle_visibility(className,display) {
   var elements = getElementsByClassName(document, className),
       n = elements.length;
   for (var i = 0; i < n; i++) {
     var e = elements[i];

     if(display.length > 0) {
       e.style.display = display;
     } else {
       if(e.style.display == 'block') {
         e.style.display = 'none';
       } else {
         e.style.display = 'block';
       }
     }
  }
}

1

मेरा समाधान:

पहले एक आईडी के साथ "<style>" टैग बनाएं।

<style id="YourID">
    .YourClass {background-color:red}
</style>

फिर, मैं इस तरह जावास्क्रिप्ट में एक फ़ंक्शन बनाता हूं:

document.getElementById('YourID').innerHTML = '.YourClass {background-color:blue}'

मेरे लिए एक जादू की तरह काम किया।


1
लाइन ब्रेक ( <br>) एक स्टाइल टैग के भीतर बेकार / अमान्य हैं
क्रिस फॉरेन्स

-1

कक्षा घोषणा में आईडी संलग्न करें

.aclass, #hashone, #hashtwo{ ...codes... }
document.getElementById( "hashone" ).style.visibility = "hidden";
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.