document.evaluate - 跨浏览器?
我一直在寻找除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呢?
没有找到相关结果
已邀请:
3 个回复
凄挡
,所以你只限于其他所有浏览器。它并不慢,因为它是XPath的本机实现。 Sizzle很有用,因为它在可用时使用本机支持浏览器提供(例如document.getElementsByClassName),但在不可用时(IE)则回退到自己做。它也被jQuery和Prototype使用,因此经过大量测试,经过严格测试,不太可能给你带来任何麻烦。 Sizzle也经过了大量的速度测试和优化(他们拥有全速测试套件),这是您不必做的更多工作。 我会说jQuery,Prototype,或者只是Sizzle,除非你做一些令人难以置信的性能敏感的事情(老实说,这可能是你的应用程序结构很差的一个指标)。
完趣镐
门锑腺潮