जबकि उतना सुंदर नहीं है querySelectorAll
(जिसमें मुद्दों की लिटनी है), यहां एक बहुत ही लचीला कार्य है जो डोम को पुन: पेश करता है और उसे अधिकांश ब्राउज़रों (पुराने और नए) में काम करना चाहिए। जब तक ब्राउज़र आपकी स्थिति का समर्थन करता है (यानी: डेटा विशेषताएँ), आपको तत्व को पुनः प्राप्त करने में सक्षम होना चाहिए।
जिज्ञासु के लिए: jsPerf पर इस बनाम QSA के परीक्षण को परेशान न करें। ओपेरा 11 जैसे ब्राउज़र क्वेरी को कैश करेंगे और परिणामों को तिरछा करेंगे।
कोड:
function recurseDOM(start, whitelist)
{
/*
* @start: Node - Specifies point of entry for recursion
* @whitelist: Object - Specifies permitted nodeTypes to collect
*/
var i = 0,
startIsNode = !!start && !!start.nodeType,
startHasChildNodes = !!start.childNodes && !!start.childNodes.length,
nodes, node, nodeHasChildNodes;
if(startIsNode && startHasChildNodes)
{
nodes = start.childNodes;
for(i;i<nodes.length;i++)
{
node = nodes[i];
nodeHasChildNodes = !!node.childNodes && !!node.childNodes.length;
if(!whitelist || whitelist[node.nodeType])
{
//condition here
if(!!node.dataset && !!node.dataset.foo)
{
//handle results here
}
if(nodeHasChildNodes)
{
recurseDOM(node, whitelist);
}
}
node = null;
nodeHasChildNodes = null;
}
}
}
फिर आप इसे निम्नलिखित के साथ आरंभ कर सकते हैं:
recurseDOM(document.body, {"1": 1});
गति के लिए, या बस recurseDOM(document.body);
अपने विनिर्देश के साथ उदाहरण: http://jsbin.com/unajot/1/edit
अलग विनिर्देश के साथ उदाहरण: http://jsbin.com/unajot/2/edit
document.querySelectorAll
IE7 पर काम नहीं करता है। तुम एक वापस आने स्क्रिप्ट जो होगा बनाना होगा चलना प्रत्येक टैग में विशेषता के लिए डोम पेड़ और जाँच (वास्तव में मुझे पता नहीं कितनी तेजी से होquerySelectorAll
रहा है, और टैग की पुस्तिका की जांच के लिए जाना होगा)।