javascript - 阻止导航并获取目标链接

标签 javascript jquery

我想通过 Ajax 更改内容代码而不是导航和重新加载页面,从而使我的网站更快。但我也关心非 Javascript 用户,所以我想使用普通链接而不是 onclick 事件。而且我想阻止导航和获取目标 href 链接来更改内容。

有没有办法用 Javascript/jQuery 来实现?显然 jQuery 支持 event.preventDefault(); 但我不认为它能让你从那个事件中获取目标链接......

最佳答案

这可以在 JavaScript 中完成(无需使用 jQuery)

要捕获文档中的所有点击,您可以使用

document.body.addEventListener('click', function(e) {
  e.preventDefault()
  const href = e.target.href
})

您还应该添加额外的检查,确保点击的元素与 href 的链接完全一致:

e.target.tagName.toLowerCase() === 'a'

工作代码示例:

document.body.addEventListener('click', function(e) {
  if (e.target.tagName.toLowerCase() === 'a') {
    e.preventDefault()
    const href = e.target.href
  } 
})

使用此功能,您将能够捕获所有点击,检查用户是否点击了 a 并仅使用纯 javascript 获取 href 属性。 http://youmightnotneedjquery.com

更新 基于 @AVAVT 评论,如果你需要处理嵌套在 a 中的东西,比如

<a href="https://google.com"> 
  <img src="https://cdn.sstatic.net/Sites/stackoverflow/company/img/logos/so/so-logo.png?v=9c558ec15d8a"> 
</a>

只需使用 e.target.closest('a')

document.body.addEventListener('click', function(e) {
  if (e.target.closest('a')) {
    e.preventDefault()
    const href = e.target.closest('a').href
  } 
})

因为 target 属性将导致被精确点击的项目(在本例中为 img)我们需要检查它是否是 a 的子项并且然后防止默认行为。

注意:

jQuery solution is simple, so it's preferred, if you already have jQuery on the page.

否则你可以不用它而使用普通的 javascript。

关于javascript - 阻止导航并获取目标链接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42188702/

相关文章:

javascript - 将数组转换为函数,使用 jquery 制作一个 javascript 加载器

javascript - Node.js 作为转发代理但更改 URL 路径?

JavaScript Regex 在两个词之间选择一个词

jquery - KendoUI Grid - 可以动态更改字体大小以适应列宽吗?

jquery - 如何检测 Angular 中是否*未*单击指令元素

jquery - 如何在 div 或其他内容中嵌入表格行并且不破坏 jQuery fadeIn 函数?

php - jQuery:使用动态添加的按钮删除最接近的 <tr>

java - 在这种情况下使用异步请求是一个好习惯吗?

javascript - 添加按下键盘时的悬停效果

javascript - 我的报价中出现错误 Uncaught SyntaxError : Unexpected string