14

Ich habe nach einer anderen CSS-Selektorfunktion als Sizzle gesucht und bin auf this function gestoßen.document.evaluate - Cross-Browser?

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; 
} 

ich nur das Gefühl, dass es zu gut ist, um wahr zu sein, ist dies eine firefox nur Funktion (XPath?) Oder ist es langsam? Warum sollte ich Sizzle benutzen?

+0

Ich denke, es ist nur Firefox, wie enttäuschend. Anscheinend kann IE es auf XML-Dokumenten tun. – Olical

+0

o mein Gott endlich fand ich jemand denken, genauso wie iam :)))))))))))) http://stackoverflow.com/questions/15310502/how-to-create-a- Javascript-Selektor-Engine – Marwan

Antwort

10

Ich glaube no stable version of IE supports document.evaluate, so dass Sie auf jeden anderen Browser beschränkt sind. Es ist nicht langsam, da es eine native Implementierung von XPath ist.

Sizzle ist nützlich, da es das native Support-Browser-Angebot verwendet, wenn es verfügbar ist (wie document.getElementsByClassName), aber zurückgreift, um es selbst zu tun, wenn es nicht verfügbar ist (IE). Es ist auch von jQuery und Prototype verwendet, so ist es stark, stark getestet und ist unwahrscheinlich, dass Sie sich keine Mühe machen. Sizzle ist auch stark Geschwindigkeit getestet und optimiert (sie haben eine ganze speed test suite), das ist mehr Arbeit, die Sie nicht tun müssen.

Ich würde sagen, gehen Sie mit jQuery, Prototype oder einfach nur Sizzle, es sei denn, Sie etwas unglaublich leistungsabhängig (was, ehrlich gesagt, ist wahrscheinlich ein Indikator, dass Sie Ihre Anwendung schlecht strukturiert).

+0

Eine gute Antwort, nur noch eine Frage. Da 'querySelectorAll()' nativ ist, ist es schneller als Sizzle. Ich weiß, IE unterstützt dies auch nicht, aber in unterstützten Browsern sollten Sie für 'querySelectorAll()' gehen? – Olical

+1

Es gibt wenig Grund, 'querySelectorAll()' direkt zu verwenden, da [Sizzle es verwendet, wenn es verfügbar ist] (https://github.com/jeresig/sizzle/blob/master/sizzle.js#L1077). Es normalisiert auch Unklarheiten um diese Funktion in verschiedenen Browsern, so dass Sie sich nur darum kümmern müssen, Ihre Anwendung zu programmieren und nicht darüber, ob die Implementierung von IE 8 leicht fehlerhaft ist. –

Verwandte Themen