Document.evaluate - Перекрестный браузер?

Я искал функцию селектора 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 над этим?

Ответы

Ответ 1

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

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

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