(jQuery)选择document.body而不是Parent Element

时间:2015-05-20 01:11:42

标签: javascript jquery performance

这部分代码是question的答案。

$(document.body).on('change', 'select[name^="income_type_"]', function() {
    alert($(this).val());
});

我有两个问题,第一个是。 是否存在选择'document.body'而不是选择select的父元素的性能问题? 这样的事情。

第二个问题是。 当放置父元素而不是document.body时,它将像'$。live()'一样运行?

$("#IdOfParentHere").on('change', 'select[name^="income_type_"]', function() {
    alert($(this).val());
});

谢谢!

2 个答案:

答案 0 :(得分:0)

  

是否存在选择'document.body'而不是选择select?的父元素的性能问题?

没有。性能没有显着差异。当然,如果你把它放在DOM上,它会更快一点,但我们谈论的是一个无法估量的小差异。

  

第二个问题是。在放置Parent元素而不是document.body?

时,它的功能类似于'$ .live()'

$.live$("body").on("click", "selector",

完全相同

答案 1 :(得分:0)

将事件处理程序附加到body而不是父元素时,可能会对性能产生影响(但不是很重要)。

假设您尝试委派click事件,您真正想要的是处理静态ul元素中动态创建的li元素。在事件委托中,当附加元素内发生事件时,将针对委托选择器评估事件目标以查看是否触发处理程序。在这种情况下,如果事件附加到ul,则必须测试ul内部的事件,但如果hanlder附加到body,则必须测试页面中的所有点击。

l ive()方法将处理程序附加到文档对象,所以是的,它将与此类似。

  

此方法提供了一种将委托事件处理程序附加到的方法   页面的文档元素,简化了事件处理程序的使用   将内容动态添加到页面时。