【发布时间】:2015-05-20 18:45:11
【问题描述】:
为什么我认为它不是重复的。
嗯,我认为这与我的要求略有不同。我不 想要为所有 A 标签添加一个监听器,而不是减去一个 href 属性,如果有的话,在点击事件的目标上。
我正在尝试“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 不是链接或包含在链接中时)。
谢谢。
【问题讨论】:
-
document.querySelectorAll("a[href]")? -
对不起,但实际上并不清楚您要实现什么。请描述您尝试解决的实际问题(您尝试添加到站点的行为),而不是您尝试的解决方案。请避免使用XY problem 来描述解决方案的问题而不描述实际的最终目标。
-
您可以在大多数 HTML 元素上监听
click事件。 -
好的,我编辑了这个问题。现在清楚了吗? (对于慷慨的 cmets,请参阅上面编辑过的问题,谢谢)。
-
我意识到这一点,但我并不想在这个项目中使用 jQuery。无论如何,我在哪里可以找到 jQuery 实现它的方式?
标签: javascript ajax find href