javascript - jQuery包含多个字符串优化

标签 javascript jquery optimization contains

我正在为数百个类似页面编写 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/

相关文章:

javascript - Ajax $_POST 调用 PHP $_SESSION 返回过期信息

optimization - 您如何管理 PhoneGap 和 webapp 代码?

c++ - 用于ProjectEuler问题11的程序优化

c++ - 使用 std::accumulate 和 std::string 有效

javascript - 如何使用字符串数组来过滤对象数组?

javascript - 删除特定 div 内的 <br> 标签

javascript - 我可以通过 Google Chrome 扩展程序以编程方式打开开发工具吗?

javascript - FullCalendar v3 - 在 View 更改时更改事件源

javascript - 使用 jquery 将 anchor 添加到链接

jquery - 如何在 knockout 中显示带有悬停文本的警告图标,以警告文本框中输入的重复记录