2009-05-06 11 views
35

मुझे HTML तत्व में भरे हुए गुणों के माध्यम से पुनरावृत्ति करने के लिए जावास्क्रिप्ट कोड की आवश्यकता है।किसी HTML तत्व में सभी विशेषताओं के माध्यम से पुनरावृत्ति कैसे करें?

यह Element.attributes रेफरी कहता है कि मैं इसे इंडेक्स के माध्यम से एक्सेस कर सकता हूं, लेकिन यह निर्दिष्ट नहीं करता कि यह अच्छी तरह से समर्थित है या इसका उपयोग किया जा सकता है (क्रॉस-ब्राउजर)।

या किसी अन्य तरीके से?

उत्तर

40

(jQuery/प्रोटोटाइप की तरह किसी भी चौखटे, का उपयोग किए बिना) यह आईई, फ़ायरफ़ॉक्स और क्रोम में काम करेगा (किसी अन्य लोगों का परीक्षण कर सकते कृपया — धन्यवाद, @Bryan?):

for (var i = 0; i < elem.attributes.length; i++) { 
    var attrib = elem.attributes[i]; 
    console.log(attrib.name + " = " + attrib.value); 
} 

संपादित करें: आईई दोहराता सभी प्रश्न समर्थन में DOM ऑब्जेक्ट को विशेषता देता है, भले ही वे वास्तव में HTML में परिभाषित किए गए हों या नहीं।

आपको यह देखने के लिए attrib.specified बूलियन संपत्ति को देखना चाहिए कि वास्तव में विशेषता मौजूद है या नहीं। फ़ायरफ़ॉक्स और क्रोम के साथ-साथ इस संपत्ति का समर्थन करने लगते हैं:

for (var i = 0; i < elem.attributes.length; i++) { 
    var attrib = elem.attributes[i]; 
    if (attrib.specified) { 
     console.log(attrib.name + " = " + attrib.value); 
    } 
} 
+3

ओपेरा और सफारी में भी काम करता है। – Bryan

+0

[यह उदाहरण मेरे लिए काम नहीं कर रहा है] (http://jsfiddle.net/acLEZ/)। ऐसा लगता है कि 'elem' परिभाषित नहीं किया गया है। मुझसे यहां क्या गलत हो रहा है? –

+3

@AndersonGreen यदि आप एक पल के लिए इसके बारे में सोचते हैं तो यह आपके पास आएगा। – Tomalak

4

एक अन्य विधि का उपयोग कर Array.from एक सरणी के लिए विशेषता संग्रह कन्वर्ट करने के लिए है:

Array.from(element.attributes).forEach(attr => { 
    // process attr 
}) 
0

मामले किसी में किसी फ़िल्टर किए गए संस्करण में रुचि रखता है, या सीएसएस विशेषता चयनकर्ताओं का निर्माण करने की कोशिश कर रहा है, ये रहा:

let el = document.body; 
Array.from(el.attributes) 
    .filter(a => { return a.specified && a.nodeName !== 'class'; }) 
    .map(a => { return '[' + a.nodeName + '=' + a.textContent + ']'; }) 
    .join(''); 

//outputs: "[name=value][name=value] 

आप निश्चित रूप से एक सरणी पुनर्प्राप्त या मीटर में के बाद से "शैली" के लिए एक फिल्टर जोड़ने के लिए में शामिल होने को हटा सकते हैं ost वेब अनुप्रयोगों शैली टैग व्यापक रूप से विगेट्स द्वारा छेड़छाड़ की जाती है।

संबंधित मुद्दे