javascript - 找到最近的 href 属性的最佳方法?

标签 javascript ajax find href

为什么我不认为它是重复的。

Hmm, I think that's slightly different to what I'm asking. I don't want to add a listener to all A tags, rather, substract an href attribute, if any, on a click event's target.

我正在尝试“Ajaxify”我的整个网站,以便当用户单击页面中包含的任何链接时,脚本会发送“url”或 HREF 属性(所单击元素的)到 Ajax 函数,该函数反过来呈现请求的内容(如单击的链接所示)。

如果元素是链接,我需要找到被单击元素的 HREF 属性。 这里的问题是,许多元素可以包含在 A 标记中(因为我构建它们的方式),而 e.target.href 则不然必须始终返回 HREF 属性。

这是我到目前为止所拥有的:

function ajaxifyLinks(e) {
    var target = e.target;
    e.preventDefault();
    while(!target.href) {
        target = target.parentNode;
    }
    if(target.href) {
        ajaxLoad(target.href);
    }
}
document.body.addEventListener('click', ajaxifyLinks);

以下是我拥有的不同“可点击”链接的示例:

<!-- Link -->
<a href="/cats">
   cats
</a>

<!-- Link -->
<a href="/hello">
   <span>
      <span> hi </span>
   </span>
</a>

<!-- Link -->
<a href="/bye">
   <span>
      bye
   </span>
</a>

正如您所看到的,这就是为什么 e.target.href 并不总是返回 HREF 属性,因为您实际上单击的是“链接的”span 元素,但是,浏览器确实需要你到链接。为什么会出现这种情况?我可以从这种行为中受益吗? (例如,提取浏览器将您带到的位置,即使您没有点击 A 标记)。

我不喜欢我的解决方案,因为 while 循环只是不断查找 DOM 树,有时是不必要的(当 e.target 不是链接或包含在链接中时)。

谢谢。

最佳答案

如果单击的元素没有 href,它将在其父元素中搜索具有 href 的元素。普通的 JS 解决方案。

function findUpTag(el, attr) {
    while (el.parentNode) {
        el = el.parentNode;
        if (el[attr]) {
            return el;
        }
    }
    return null;
}

document.body.onclick = function (event) {
    event.preventDefault();

    var href = event.target.href;
    
    if (!href) {
        var closest = findUpTag(event.target, 'href');
        if (closest) {
            href = closest.href;
        }
    }

    document.getElementById('output').innerHTML = 'element clicked: ' + event.target.nodeName + '<br>closest href: ' + href;
};
a,
output {
    display: block;
}
<!-- Link -->
<a href="/cats">
   cats
</a>

<!-- Link -->
<a href="/hello">
   <span>
      <span> hi </span>
   </span>
</a>

<!-- Link -->
<a href="/bye">
   <span>
      bye
   </span>
</a>

<output id="output"></output>

关于javascript - 找到最近的 href 属性的最佳方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29114334/

相关文章:

linux - grep 一些单词,其前 10 个字符是从 20 个字符中已知的,最后 10 个字符是动态的

javascript - 回调是否保证 ES6 类构造函数中的 promise 得到解决或拒绝?

javascript - 在 iPhone APP 中集成 Disqus

javascript - 如何用表单中的值填充div?

c# - 使用 UpdatePanel 删除行后更新/刷新 Gridview。 ASP.NET C# AJAX

sql - 带查找功能的 Rails SQL 查询

javascript - 如何将原型(prototype)函数添加到 Canvas 上下文

jquery - ajax jquery - 为什么这个额外的斜杠?

php - Ajax 分页中的问题

Unix 查找缺少文件的目录