我正在为数百个类似页面编写 Greasemonkey 脚本。
并且想要在 $("#cont > h2") 中执行 AA 或 AB 或 AC...等操作
所以我尝试了:
var 1stgroup = new Array(40)
1stgroup [0] = $("#cont > h2:contains('AA')")
1stgroup [1] = $("#cont > h2:contains('AB')")
1stgroup [2] = $("#cont > h2:contains('AC')")
...
1stgroup [39] = $("#cont > h2:contains('BN')")
for (i =0; i < 40 ; i++) {
if (1stgroup.text()) {
//do something here
};
};
还有第2~7组。
它可以工作,但看起来多余......
如何优化它?
抱歉我的英语不好,感谢您的每一个回复。
最佳答案
- DOM 遍历是 JavaScript 中最慢的部分,因此尽可能少地遍历 DOM 是有意义的。
:contains()
是 Sizzle 扩展,不是 CSS3 的一部分,因此不会被浏览器优化。会很慢。
考虑到这一点,我会做这样的事情;
var matches = ['AA', 'AB', 'AC'];
$('#cont > h2').filter(function () {
var text = $(this).text();
for (var i=0;i<matches.length;i++) {
if (text.indexOf(matches[i]) !== -1) {
return true;
}
}
return false;
}).each(function () {
// do something with each of these
});
您可以做的另一件事是对 matches
数组进行排序,然后使用比线性搜索更智能的搜索算法(例如 binary search )来检测文本是否匹配。
关于javascript - jQuery包含多个字符串优化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11345118/