javascript - 优化 jQuery 选择器的最佳方式,为什么?

标签 javascript jquery html jquery-selectors

我在我的 JSP 中多次使用这个 jQuery 选择器:

 $("#customers tbody tr td input[type='checkbox'][name='selectedCustomers']")

我在一些博客上找到的解决方案是我应该先做:

var customer=$('#customers')

然后使用上面的客户对象进行进一步的调用。

 customer.find("tbody tr td input[type='checkbox'][name='selectedCustomers']")

我的问题是,这个解决方案是否会有所不同,为什么?

我的理解

当我这样做

$("#customers tbody tr td input[type='checkbox'][name='selectedCustomers']")

jQuery内部会先获取与div id="customers"关联的对象 (通过document.getElementById("customers")) 然后会遍历到指定的 复选框。如果我按照建议的解决方案进行操作,那么 document.getElementById("customers") 将只被触发一次,其余的将相同。因此,我将自己从不必要的多个 document.getElementById 中拯救出来,但其余部分将相同。我的理解正确吗?如果是,仅就我所知,document.getElementById 是否是一项成本更高的操作?

编辑:-

我不仅多次使用上述选择器,而且还使用 div id="customer"下的其他可能的选择器。所以再次提问,如果我先缓存客户对象和不缓存,在性能方面有什么不同?

最佳答案

您无需如此具体。我猜,至多,这个:

$('#customers td [name="selectedCustomers"]')

... 这应该会提高性能。接下来,如果您实际上每次都查询 selectedCustomers,则应该缓存整个内容:

var selectedCustomers = $('#customers td [name="selectedCustomers"]');

否则,如果名称是动态的,并且每页只有一个名称相同的项目...

var item = $(document.getElementsByName(someName)[0]);

另一方面,仅缓存 $('#customers') 几乎毫无意义。 .findcustomers 上将首先完成与整个选择器一样多的工作,尤其是在 querySelector 支持下。

关于javascript - 优化 jQuery 选择器的最佳方式,为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14003873/

相关文章:

javascript - 在 curl 返回中隔离 css/head/etc

javascript - 在 Angular 中使用双向绑定(bind)时如何预选单选按钮?

javascript - 安卓:用JS设置window.location

javascript - 给 div 100% 浏览器窗口的高度

javascript - 如何验证 JavaScript 中的正则表达式?

html - 为什么这些行内 block 元素会产生额外的宽度?

php - 如何先显示页面再加载自定义字体?

javascript - 使用 moment.js 根据日期更改输入字段的背景和颜色

javascript - 谷歌地图问题无法调用未定义的方法 'apply'?

javascript - 如何覆盖 "transformed"元素?