带有选择器的$(document).on(event)的纯javascript等价物
我正在尝试将jQuery事件处理程序转换为纯javascript。页面上有一个特定选择器的负载,因此设计时只有一个带有该选择器的事件目标文档:带有选择器的$(document).on(event)的纯javascript等价物,javascript,jquery,Javascript,Jquery,我正在尝试将jQuery事件处理程序转换为纯javascript。页面上有一个特定选择器的负载,因此设计时只有一个带有该选择器的事件目标文档: $(document).on("click", selectorString, function(event) { // do stuff }); 其中,selector是一个选择器列表,作为字符串“.one、.two、.three” 但是,如果没有jQuery,我很难复制它: document.addEventListener("click", f
$(document).on("click", selectorString, function(event) {
// do stuff
});
其中,selector
是一个选择器列表,作为字符串“.one、.two、.three
”
但是,如果没有jQuery,我很难复制它:
document.addEventListener("click", function(event){
if (elementHasClass(event.target, selectorString) {
// do stuff
}
});
但这并没有期望的行为,因为侦听器只在
文档
元素上,而不是文档中的选定元素上。有人能帮上忙吗?您的问题似乎是它对嵌套元素不起作用
例如,如果您单击一个嵌套的span
元素,该元素具有指定类的父元素,则该元素不起作用,因为您只是检查span
元素(即event.target
)是否具有该类
要解决此问题,您可以委托事件并检查事件。target
元素的父元素是否具有指定的类:
这是因为您现在需要创建自己的事件委派。
document.addEventListener("click", function (e) {
var target = e.target;
while (target && target.parentNode !== document) {
target = target.parentNode;
if (!target) { return; } // If element doesn't exist
if (target.classList.contains('target')){
// do stuff
console.log(e.target);
}
}
});