14

मैं Sizzle के अलावा एक सीएसएस चयनकर्ता फ़ंक्शन ढूंढ रहा हूं और मैं this function पर आया हूं।document.evaluate - क्रॉस ब्राउज़र?

function SparkEn(xpath,root) { 
    xpath = xpath 
    .replace(/((^|\|)\s*)([^/|\s]+)/g,'$2.//$3') 
    .replace(/\.([\w-]+)(?!([^\]]*]))/g, '[@class="$1" or @class$=" $1" or @class^="$1 " or @class~=" $1 "]') 
    .replace(/#([\w-]+)/g, '[@id="$1"]') 
    .replace(/\/\[/g,'/*['); 
    str = '(@\\w+|"[^"]*"|\'[^\']*\')'; 
    xpath = xpath 
    .replace(new RegExp(str+'\\s*~=\\s*'+str,'g'), 'contains($1,$2)') 
    .replace(new RegExp(str+'\\s*\\^=\\s*'+str,'g'), 'starts-with($1,$2)') 
    .replace(new RegExp(str+'\\s*\\$=\\s*'+str,'g'), 'substring($1,string-length($1)-string-length($2)+1)=$2'); 
    var got = document.evaluate(xpath, root||document, null, 5, null); 
    var result=[]; 
    while (next = got.iterateNext()) 
    result.push(next); 
    return result; 
} 

मैं बस लगता है कि यह बहुत अच्छा है सच है, यह एक फ़ायरफ़ॉक्स केवल समारोह (xpath?) है या यह धीमी गति से कर रहा है? असल में मैं इस पर Sizzle का उपयोग क्यों करूंगा?

+0

मुझे लगता है कि यह केवल फ़ायरफ़ॉक्स है, कितना निराशाजनक है। जाहिर है आईई इसे एक्सएमएल दस्तावेज़ों पर कर सकता है। – Olical

+0

ओ मेरे भगवान ने आखिर में मुझे किसी को लगता है जैसे iam :))))))))))))) http://stackoverflow.com/questions/15310502/how-to-create-a- जावास्क्रिप्ट-चयनकर्ता इंजन – Marwan

उत्तर

10

मुझे विश्वास है कि no stable version of IE supports document.evaluate, इसलिए आप हर दूसरे ब्राउज़र तक सीमित हैं। यह धीमा नहीं है क्योंकि यह XPath का मूल कार्यान्वयन है।

सिज़ल उपयोगी है क्योंकि यह उपलब्ध होने पर देशी समर्थन ब्राउज़र ऑफ़र का उपयोग करता है (जैसे document.getElementsByClassName), लेकिन अनुपलब्ध (आईई) के दौरान इसे स्वयं करने के लिए वापस आ जाता है। इसका उपयोग jQuery और Prototype द्वारा भी किया जाता है, इसलिए यह भारी, भारी परीक्षण किया जाता है और आपको कोई परेशानी नहीं होने की संभावना है। Sizzle भी तेजी से परीक्षण और अनुकूलित है (उनके पास एक पूरे speed test suite है), जो आपको अधिक काम नहीं करना है।

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

+0

एक अच्छा जवाब, बस एक और सवाल। 'QuerySelectorAll() 'मूल होने के कारण, यह Sizzle से तेज है। मुझे पता है कि आईई इसका समर्थन नहीं करता है, लेकिन समर्थित ब्राउज़र में आप 'querySelectorAll() 'के लिए जाना चाहिए? – Olical

+1

'querySelectorAll() 'का उपयोग करने के लिए बहुत कम कारण है, क्योंकि [Sizzle इसका उपयोग करता है तो यह उपयोग करता है] (https://github.com/jeresig/sizzle/blob/master/sizzle.js#L1077)। यह अलग-अलग ब्राउज़रों में उस फ़ंक्शन के आस-पास की अजीबता को भी सामान्य करता है ताकि आप अपने आवेदन को कोड करने के बारे में चिंता कर सकें और इस बारे में नहीं कि आईई 8 का कार्यान्वयन थोड़ा छोटी है या नहीं। –

0

पर उनके क्रियान्वयन देखें यह एक है होने का दावा करता पाया है, डीओएम 3 डब्ल्यू 3 सी वर्किंग ग्रुप नोट: http://www.w3.org/TR/2004/NOTE-DOM-Level-3-XPath-20040226/xpath.html#XPathEvaluator-evaluate

कार्यान्वयन की स्थिति: https://developer.mozilla.org/en-US/docs/Web/API/document.evaluate#Browser_compatibility आज केवल नवीनतम स्थिर डेस्कटॉप ब्राउज़र पर आईई 10 में नहीं है।

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