我一直在寻找Sizzle以外的CSS选择器功能,我遇到了this function。
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?
答案 0 :(得分:10)
我相信no stable version of IE supports document.evaluate
,因此您只能使用其他所有浏览器。它并不慢,因为它是XPath的本机实现。
Sizzle很有用,因为它在可用时使用本机支持浏览器提供(例如document.getElementsByClassName),但在不可用时(IE)则回退到自己做。它也被jQuery和Prototype使用,因此经过大量测试,经过严格测试,不太可能给您带来任何麻烦。 Sizzle也经过了大量的速度测试和优化(他们有一个完整的speed test suite),这是你不需要做的更多工作。
我会说jQuery,Prototype,或者只是Sizzle,除非你做一些令人难以置信的性能敏感的事情(老实说,这可能表明你的应用程序结构很差)。
答案 1 :(得分:2)
我刚刚找到http://sourceforge.net/projects/js-xpath/,声称是
用于Internet Explorer 5 +的DOM Level 3 XPath的实现
在http://nchc.dl.sourceforge.net/project/js-xpath/js-xpath/1.0.0/xpath.js
查看其实施情况答案 2 :(得分: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中。