14

Sizzle以外の CSS セレクター関数を探していて、この関数に出会いました。

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

私はそれが本当であるには良すぎると感じています.これはFirefoxのみの機能ですか(xpath?)、それとも遅いですか?基本的に、なぜこれよりも Sizzle を使用するのでしょうか?

4

3 に答える 3

10

IE の安定したバージョンは をサポートしdocument.evaluateていないと思うので、他のすべてのブラウザーに限定されます。XPath のネイティブ実装であるため、遅くはありません。

Sizzle は、利用可能な場合はブラウザーが提供するネイティブ サポート ( document.getElementsByClassNameなど) を使用するため便利ですが、利用できない場合 (IE) はそれ自体を実行するようにフォールバックします。jQueryPrototypeでも使用されているため、非常に厳しくテストされており、問題が発生する可能性はほとんどありません。Sizzle はまた、スピード テストと最適化が徹底的に行われています (スピード テスト スイート全体があります)。

jQuery、Prototype、または単に Sizzle を単独で使用することをお勧めします (パフォーマンスが非常に重要な場合を除きます) (これは、おそらく、アプリケーションの構造が不十分であることを示しています)。

于 2011-01-13T16:00:37.773 に答える
2

私はhttp://sourceforge.net/projects/js-xpath/を見つけました。

Internet Explorer 5+ 用の DOM レベル 3 XPath の実装

http://nchc.dl.sourceforge.net/project/js-xpath/js-xpath/1.0.0/xpath.jsで実装を参照してください。

于 2013-01-30T23:07:44.547 に答える