2009-02-10 11 views
10

मुझे यादृच्छिक विशेषता मानों के अनुसार यादृच्छिक नोड्स खोजने की आवश्यकता है। ऐसा करने के लिए मैं getElementsByTagName से नोड्स पर getAtrribute का उपयोग करता हूं।getAttribute आईई 7 में कक्षा वापस नहीं कर सकता है?

ऐसा लगता है कि जब मैं कक्षा के नाम को विशेषता के रूप में देखता हूं तो यह आईई (एफएफ पर काम करता है) पर काम नहीं करता है।

कोई भी जानता है कि getAtrribute केवल 'कक्षा' या अन्य विशेषताओं पर भी काम नहीं करता है? (यदि वह केवल वर्ग मैं एक वैकल्पिक हल करेंगे।)

उत्तर

18

यदि आप jQuery की तरह कुछ उपयोग नहीं कर रहे दर्द दूर ले जाना, अपने जावास्क्रिप्ट पार मंच के सभी परीक्षण के लायक है, लेकिन कक्षा सिर्फ एक विशेष हो सकता है मामला।

element.className 
2

आईई इस संबंध में दिया गया है:

इस वर्ग के होने का एक पार मंच तरीका होना चाहिए। आप getAttribute("className") के माध्यम से आईई में कक्षा तक पहुंच सकते हैं लेकिन निश्चित रूप से यह वास्तव में विशेषता नहीं है इसलिए यह काम नहीं करता है! आईई।

जो आपको element.className प्राप्त करने के लिए ब्रांचिंग की पसंद के साथ छोड़ देता है या "क्लासनाम" या "कक्षा" पर प्राप्त करने के लिए शाखाकरण करता है। अच्छा नही।

8

कोई भी जानता है कि getAtrribute केवल 'कक्षा' या अन्य विशेषताओं पर भी काम नहीं करता है?

यह सभी विशेषताओं जहां एचटीएमएल विशेषता नाम डोम संपत्ति का नाम (className, htmlFor) से अलग है के लिए विफल रहता है, के साथ साथ आप डोम शैली कैपिटल अक्षरों का प्रयोग किया है।

disabled, readOnly, checked, selected, multiple, 
compact, declare, isMap, noHref, defer, noResize, 
size, cols, rows, width, height, hspace, vspace, 
maxLength, tabIndex, colSpan, rowSpan 

और संभवतः दूसरों मैं नहीं छूटा है: यह भी गुण जिसका डोम गुण तार नहीं कर रहे हैं के लिए गलत डेटाप्रकार रिटर्न!

element.getAttribute(x) 
IE में

यह कहते हुए बिल्कुल एक ही है:

element[x] 

तो सामान्य रूप में आप getAttribute का उपयोग कर से बचना चाहिए, और इस तरह 'तत्व के रूप में सरल डोम स्तर 1/2 एचटीएमएल इंटरफेस का उपयोग करें। इसके बजाय className '।

यह अंत में IE8 में तय किया गया है।

1

आप अपने तत्वों से सभी विशेषताओं की एक सूची ले सकते हैं और इस तरह उनके मूल्य का परीक्षण कर सकते हैं। यह स्निपेट दोनों IE और वेबकिट ब्राउज़रों संभालती है, और सीएसएस वर्ग की स्ट्रिंग मान वापस आ जाएगी:

var value = ""; 
var elements = document.getElementsByTagName("div"); 

for(var i = 0; i < elements.length; i++){ 
    if(typeof elements[i].attributes['class'] == "undefined"){ 
     value = elements[i].getAttribute("class"); 
    } else { 
     value = elements[i].attributes['class'].nodeValue; 
    } 

    alert(value); // careful, this will be a lot of alerts 
} 
0

यहाँ आप मिलता है और पार ब्राउज़र संगतता के साथ वर्ग विशेषता सेट कर सकते हैं।

 //also works with IE7 and below 

     //get class attribute value 
     var class_name = document.getElementById('elem_id').className; 

     //set class attribute 
     document.getElementById('elem_id').className = 'new-class-name'; 
संबंधित मुद्दे