14

私はSizzle以外のCSSセレクタ関数を探していて、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)Firefoxの唯一の機能であるか、それは遅いですか?基本的になぜ私はこれ以上シズルを使用しますか?

+0

私はそれがFirefoxだけであると思います、どのように残念です。どうやらIEはXML文書でそれを行うことができます。 – Olical

+0

o私の神、やっと私は誰かがiam :)と同じように考えていることが分かった)))))))))))))))))) http://stackoverflow.com/questions/15310502/how-to-create-a- javascript-selector-engine – Marwan

答えて

10

私はno stable version of IE supports document.evaluateと信じているので、他のすべてのブラウザに限られています。それはXPathのネイティブ実装なので遅くはありません。

シズルは、利用可能なネイティブサポートブラウザ(たとえばdocument.getElementsByClassName)を使用するので便利ですが、使用できなくなったときにはそれ自体に戻ります(IE)。 jQueryPrototypeでも使用されていますので、重く、重くテストされているため、何か問題を起こす可能性は低いです。 Sizzleはスピードテストと最適化を重視しており(全体でspeed test suite)、これはあなたがする必要のない作業です。

jQuery、Prototype、または単にSizzleと言いたいのは、パフォーマンスに敏感な何かを実行していない限りです(正直なところ、あなたがアプリケーションを構成していないことを示す指標かもしれません)。

+0

すばらしい答えです。もう1つ質問です。 'querySelectorAll()'がネイティブであるため、Sizzleより高速です。私はIEもこれをサポートしていないことを知っていますが、サポートされているブラウザでは 'querySelectorAll()'に行くべきでしょうか? – Olical

+1

[querySelectorAll()]は、[Sizzleが利用可能であれば使用する](https://github.com/jeresig/sizzle/blob/master/sizzle.js#L1077)から直接使用する理由はほとんどありません。また、さまざまなブラウザーでその関数の奇妙さを正規化するので、アプリケーションのコーディングについて心配するだけで、IE 8の実装がややバグかどうかは心配しないでください。 –

0

で彼らの実装を参照してください。それがあることを主張する、http://sourceforge.net/projects/js-xpath/発見しましたDOM3 W3Cワーキンググループ注: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最新の安定したデスクトップブラウザではIE 10にのみ存在しません。

関連する問題