document.evaluate - кросс-браузер? - PullRequest
14 голосов
/ 13 января 2011

Я искал функцию селектора CSS, отличную от Sizzle , и я столкнулся с этой функцией .

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 над этим?

Ответы [ 3 ]

10 голосов
/ 13 января 2011

Я считаю, , что ни одна стабильная версия IE не поддерживает document.evaluate, поэтому вы ограничены любым другим браузером.Он не медленный, так как является нативной реализацией XPath.

Sizzle полезен, потому что он использует предложение браузеров с собственной поддержкой, когда оно доступно (например, document.getElementsByClassName ), но отступает от этогосам, когда недоступен (IE).Он также используется jQuery и Prototype , так что он тяжело, тяжело протестирован и вряд ли доставит вам неприятности.Sizzle также тщательно тестируется на скорость и оптимизируется (у них есть целый набор скоростных тестов ), что является дополнительной работой, которую вам не нужно делать.

Я бы сказал, пойти с jQuery, Prototype или просто Sizzle сам по себе, если вы не делаете что-то невероятно чувствительное к производительности (что, честно говоря, вероятно, является индикатором того, что вы плохо структурировали свое приложение).

2 голосов
/ 31 января 2013

Я только что нашел http://sourceforge.net/projects/js-xpath/,, который утверждает, что

реализация DOM Level 3 XPath для Internet Explorer 5 +

См. Их реализацию на http://nchc.dl.sourceforge.net/project/js-xpath/js-xpath/1.0.0/xpath.js

0 голосов

Это рабочая группа 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 в последних стабильных браузерах настольных компьютеров.

...