2013-01-03 11 views
13

मैं जावास्क्रिप्ट में एकाधिक आईडी का उपयोग करने का तरीका समझ नहीं सकता। एकल आईडी और getElementById के साथ कोई समस्या नहीं है, लेकिन जैसे ही मैं कक्षा में आईडी बदलता हूं और getElementsByClassName का उपयोग करने का प्रयास करता हूं, फ़ंक्शन काम करना बंद कर देता है। मैंने इस विषय के बारे में 100 पदों को पढ़ा है; अभी भी जवाब मिला है, इसलिए मुझे उम्मीद है कि यहां कोई व्यक्ति जानता है कि GetElementsByClassName काम कैसे करें।जावास्क्रिप्ट-फ़ंक्शन में getElementsByClassName का उपयोग कैसे करें?

यहाँ कुछ सरल कोड है कि मैं परीक्षण के लिए इस्तेमाल किया है:

function change(){ 
    document.getElementById('box_one').style.backgroundColor = "blue"; 
} 

function change_boxes(){ 
    document.getElementsByClassName ('boxes').style.backgroundColor = "green"; 
} 


<input name="" type="button" onClick="change(document.getElementById('box_one')); change_boxes(document.getElementsByClassName('boxes'))" value="Click" /> 

<div id="box_one"></div> 
<div class="boxes" ></div> 
<div class="boxes" ></div> 
+0

के रूप में, समारोह एक ** सूची लौटाती है: यह भी IE में सीमित समर्थन हासिल है तो आप का उपयोग कर से बेहतर हो सकता है jQuery https://developer.mozilla.org/ en-US/docs/डोम/document.getElementsByClassName। –

+1

संभावित डुप्लिकेट [जावास्क्रिप्ट में इस getElementsByClassName कॉल के साथ क्या गलत है?] (Http://stackoverflow.com/questions/3391791/what-is-wrong-with-this-getelementsbyclassname-call-in-javascript) और [Can GetElementsByClassName परिवर्तन शैली?] (http://stackoverflow.com/questions/10693845/can-getelementsbyclassname-change-style) और बहुत कुछ, जो दाहिने हाथ कॉलम में पाया जा सकता है। –

+0

अधिक डुप्लीकेट: http://stackoverflow.com/q/3349332/218196, http://stackoverflow.com/q/12377734/218196, http://stackoverflow.com/q/13667533/218196। –

उत्तर

28

getElementsByClassName() रिटर्न एक nodeListHTMLCollection *। आप सीधे परिणाम पर काम करने की कोशिश कर रहे हैं; आपको परिणामों के माध्यम से फिर से प्रयास करने की जरूरत है।

function change_boxes() { 
    var boxes = document.getElementsByClassName('boxes'), 
     i = boxes.length; 

    while(i--) { 
     boxes[i].style.backgroundColor = "green"; 
    } 
} 

* इंटरफ़ेस में परिवर्तन के साथ अपडेट

+0

Thx - ठीक काम कर रहा है। यकीन नहीं है कि मैं वास्तव में समझता हूं कि क्यों - बीमार बड़ी परियोजना में आपके समाधान की प्रतिलिपि बना रहा है और उम्मीद है कि मैं इसे – jan199674

+1

@ केनेथ के साथ भी काम कर सकता हूं: 'getElementsByClassName' उस वर्ग के नाम के साथ सभी तत्वों को लौटाता है, यानी ** एकाधिक ** तत्व । इन तत्वों के गुणों को बदलने के लिए आपको तत्वों की सूची में पुन: प्रयास करना होगा। –

+0

हम्म - एक और समस्या है जिसे मैं समझ नहीं सकता। मेरे पास एक ही स्टाइल का उपयोग कर उसी पृष्ठ पर 20 बटन हैं। बटन div-class हैं और मैथलेटिक्स से कार्य कोड के साथ ऑनक्लिक द्वारा चुने गए हैं। प्रत्येक बटन वास्तव में 2 बटनों से बना होता है जो क्लिक किए जाने पर ज़ेड-इंडेक्स द्वारा स्थिति बदलता है और प्रत्येक बटन के लिए एक नई तस्वीर प्रस्तुत करता है। – jan199674

4

getElementsByClassName तत्वों सब किसी वर्ग नाम है जो का एक सेट देता है

var elements = document.getElementsByClassName('boxes'); 
for(var i=0, l=elements.length; i<l; i++){ 
elements[i].style.backgroundColor = "green"; 
} 
0

getElementsByClassName की सूची लौटाता है तत्वों को तो आप उनके माध्यम से फिर से शुरू करने और सेट करने की आवश्यकता होगी प्रत्येक आइटम पर शैलियों को एक-एक करके। तत्वों की ** नाम से पता चलता

$(".boxes").css("backgroundColor", "green"); 
संबंधित मुद्दे