使用大量选择器时jQuery性能有多糟糕,或者是这样?

Glo*_*ish 0 performance jquery file-extension css-selectors

当该链接的href指向具有特定扩展名的文件时,我想将click()事件应用于页面上的所有链接.适用扩展名列表徘徊在30左右,未来可能会有所增长(但绝不会超过100).

我的第一个倾向是像这样构造事件绑定:

$("a[href$=avi],
   a[href$=ppt],
   a[href$=rtf],

// ...snip a bunch more of these....

   a[href$=pdf],
   a[href$=xml]").click(function() {
      // Do something
 });
Run Code Online (Sandbox Code Playgroud)

这疯了吗?

Tat*_*nen 6

我会选择所有链接,然后在点击功能中过滤它,例如:

$('a').click(function() {
    var ext = /[^.]+$/.exec($(this).attr('href'));
    switch(ext) {
        case 'avi':
        case 'ppt':
        ...
        case 'xml':
            // Do something
            break;
    }
});
Run Code Online (Sandbox Code Playgroud)

节省了大量的遍历,也更漂亮.

你的方法的坏处是jQuery可能独立地处理你的每个选择器,所以在它完成搜索第一个选择器后,它会完全忘记它找到的其他内容并再次搜索整个文档以寻找下一个选择器.使用这种方法,jQuery只需搜索一次所有链接,并且在函数内部使用switch-case可能是如此之快,您不必为性能问题烦恼.