Javascript 限制范围是否更好?
这是本节的目标,因此范围有限Javascript 限制范围是否更好?,javascript,jquery,Javascript,Jquery,这是本节的目标,因此范围有限 $('#section').on('click','.target',function(){~}) 这是在dom中,所以它的范围很广 哪个更快? 我认为后者很快,因为前者从dom中搜索部分,然后搜索目标。 但后者只从dom中搜索目标 这个想法错了吗 限制范围是否更好 总之,是的 您发布的两个示例之间存在一些差异 $('.target').click(function(){~}) 这将针对#section注册一个处理程序,该处理程序将在单击时被激发,但只有在实际单
$('#section').on('click','.target',function(){~})
这是在dom中,所以它的范围很广
哪个更快?
我认为后者很快,因为前者从dom中搜索部分,然后搜索目标。
但后者只从dom中搜索目标
这个想法错了吗
限制范围是否更好
总之,是的
您发布的两个示例之间存在一些差异
$('.target').click(function(){~})
这将针对#section
注册一个处理程序,该处理程序将在单击时被激发,但只有在实际单击了.target
的情况下,才会调用处理程序
$('#section').on('click','.target',function(){~})
这相当于
$('.target').click(function(){~})
将仅为在处理程序在页面中任何位置注册时位于DOM中的.target
注册
从性能角度来看,您应该将作用域限制为注册处理程序时页面上的元素。如果它在您的特定场景中有意义
如果要动态创建
.target
元素,只需使用第一个表单。我更愿意说,差异非常小,我们可以忽略它。第一个表单不搜索.target
。它将事件处理程序绑定到#section
,然后当您单击它时,将测试您是否使用class=“target”
单击某个元素。但这意味着当您单击#section
中的任意位置时,代码必须运行才能执行此测试。第二个将处理程序直接绑定到.target
。您也可以执行$(“#section.target”)
来限制范围。当您单击不在#节
内的.target
时,第二个将运行。
$('.target').on('click', function(){~})
$('#section .target').on('click', function(){~})