单击香草JS版本的jQuery文档是否可获得链接?

dou*_*aci 0 javascript ajax jquery addeventlistener

是否有纯JS版本?

$(document).on('click', 'a[href]', function(event) {
  event.preventDefault();
  here.change(this);
});
Run Code Online (Sandbox Code Playgroud)

我正在寻找的特定功能是为以后通过JS(例如AJAX)创建的任何链接添加事件监听器。

ade*_*neo 5

现代的浏览器支持matches使这变得更加容易

document.addEventListener('click', function(event) {
  if (event.target.matches('a[href], a[href] *')) {
    event.preventDefault();
    console.log('works fine')
  }
}, false);

document.body.innerHTML = '<a href="#"><span>Click Me!</span></a><br /><div>not me!</div>';
Run Code Online (Sandbox Code Playgroud)

您可以通过简单的功能使此操作更加方便

function addEvent(parent, evt, selector, handler) {
    parent.addEventListener(evt, function(event) {
    if (event.target.matches(selector + ', ' + selector + ' *')) {
        handler.apply(event.target.closest(selector), arguments);
    }
  }, false);    
}
Run Code Online (Sandbox Code Playgroud)

请注意,closest()只有最新的浏览器才支持,MDN上有一个polyfill

这可以复制更多的jQuery行为,并且更易于使用,并且可以this正确设置值

function addEvent(parent, evt, selector, handler) {
    parent.addEventListener(evt, function(event) {
    if (event.target.matches(selector + ', ' + selector + ' *')) {
        handler.apply(event.target.closest(selector), arguments);
    }
  }, false);    
}
Run Code Online (Sandbox Code Playgroud)


fro*_*zen 0

我相信这可以实现你想要的:

// for all dom elements on click
document.onclick = function(event) {
    var el = event.target; // get what is being clicked on
    if(el.hasAttribute('href') && el.tagName == 'a') { // check if it's a link
        event.preventDefault();
        here.change(this); // what is this?
    }
}
Run Code Online (Sandbox Code Playgroud)

  • `.tagName` 应该全部大写 (3认同)
  • 假设标记是“&lt;a href=""&gt;&lt;span&gt;Click me&lt;/span&gt;&lt;/a&gt;”,这将不起作用,您必须考虑嵌套元素并从目标匹配中查找最接近的父元素选择器也是如此 (2认同)