2009-05-20 13 views
21

लाइब्रेरी का उपयोग किये बिना, सीएसएस चयनकर्ता के साथ डोम तत्वों को ढूंढने का सबसे आसान तरीका क्या है?सीएसएस चयनकर्ताओं के साथ डीओएम तत्वों को खोजने का सबसे अच्छा तरीका

function select(selector) { 
return [ /* some magic here please :) */ ] 
}; 

select('body')[0] // body; 

select('.foo') // [div,td,div,a] 

select('a[rel=ajax]') // [a,a,a,a] 

यह प्रश्न पूरी तरह अकादमिक है। मुझे यह जानने में दिलचस्पी है कि यह कैसे लागू किया गया है और 'स्नैग' क्या हैं। इस समारोह का अपेक्षित व्यवहार क्या होगा? (वापसी सरणी, या पहले डोम तत्व, आदि वापस)।

उत्तर

4

इन दिनों, पुस्तकालय के बिना इस तरह की चीजें करना पागलपन है। हालांकि, मुझे लगता है कि आप यह जानना चाहते हैं कि यह सामान कैसे काम करता है। मैं सुझाव दूंगा कि आप jQuery या अन्य जावास्क्रिप्ट पुस्तकालयों के स्रोत में देखें।

इस बात को ध्यान में रखते हुए, चयनकर्ता फ़ंक्शन में सभी अलग-अलग चयनकर्ताओं को संभालने के लिए केस कथन स्विच करने के लिए बहुत कुछ शामिल करना होगा। उदाहरण:

function select(selector) { 
if(selector.indexOf('.') > 0) //this might be a css class 
    return document.getElementsByClassName(selector); 
else if(selector.indexOf('#') > 0) // this might be an id 
    return document.getElementById(selector); 
else //this might be a tag name 
    return document.getElementsByTagName(selector); 
//this is not taking all the different cases into account, but you get the idea. 
}; 
+2

जरूरी नहीं - Sizzle (jQuery का इंजन) देखें और आप इनमें से कोई भी नहीं देखेंगे। – James

+5

यह आधुनिक ब्राउज़रों में अनावश्यक है। querySelectedAll() एक बेहतर समाधान है। – freeone3000

0

कोई भी रास्ता नहीं बनाया गया है। अनिवार्य रूप से, यदि आप jQuery के बिना जाने का फैसला करते हैं, तो आप अपने कोड में इसके एक बग्गी संस्करण की प्रतिलिपि बनायेंगे।

+2

निष्पक्ष होने के लिए, JQuery एकमात्र लाइब्रेरी नहीं है जो चयनकर्ता-शैली कार्यक्षमता प्रदान करती है, केवल सबसे प्रमुख। –

+1

हां, ज़ाहिर है। "बिना jQuery के", मेरा मतलब पसंद की बाहरी पुस्तकालय के बिना है। –

3

चयनकर्ता इंजन बनाना कोई आसान काम नहीं है। मैं क्या पहले से मौजूद है से सीखने का सुझाव देते हैं:

  • Sizzle
  • Peppy (जेम्स Donaghue द्वारा निर्मित)
  • Sly (हेराल्ड Kirschner द्वारा निर्मित)
+0

ग्रेट लिंक! बहुत दिलचस्प। विशेष रूप से उस प्रदर्शन परीक्षण धावक। –

3
(Resig, jQuery में प्रयोग किया जाता द्वारा निर्मित)

यहां एक अच्छा स्निपेट है जिसका मैंने कुछ बार उपयोग किया है। यह वास्तव में छोटा और साफ है। यह सभी आम सीएसएस चयनकर्ताओं के लिए समर्थन है।

http://www.openjs.com/scripts/dom/css_selector/

68

कस्टम हैक्स के अलावा, हाल के ब्राउज़रों में आप) W3C Selectors API Level 1, अर्थात् document.querySelector (में परिभाषित देशी तरीकों और document.querySelectorAll() उपयोग कर सकते हैं:

var cells = document.querySelectorAll("#score > tbody > tr > td:nth-of-type(2)"); 
+6

+1 एक साधारण समाधान के लिए जो लाइब्रेरी की आवश्यकता नहीं है। – starbeamrainbowlabs

+3

डॉक्स और ब्राउज़र https://developer.mozilla.org/en-US/docs/Web/API/Document.querySelectorAll – Michael

+4

का समर्थन करता है अब यह चयनित उत्तर होना चाहिए - सभी आधुनिक ब्राउज़र IE7 को छोड़कर समर्थित हैं? अगस्त 2013 में, यह मेरे लिए काफी अच्छा है! – cronoklee

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