javascript - 单击包含标签的链接时,不要将标签添加到 URL

标签 javascript jquery html

我见过的一些网站是这样做的。

我有类似 <a href="#delete">Delete</a> 的链接

然后显示一个 div。这当然会在地址栏中的 URL 末尾添加#delete。有没有办法仍然调用#delete 但不将其添加到 URL 的末尾?

比如GitHub,在一些弹窗中,你可以看到左下角的地址是https://github.com/settings/admin#delete_account_confirmation

但是当您按下链接时,它不会添加 #delete_account_confirmation在网址中?但弹出窗口仍然显示。怎么办?

最佳答案

只需调用它的点击事件preventDefault()方法

document.getElementById('preventAnchor').addEventListener('click', function(e){
   e.preventDefault();
   var anchor = this.href.split('#')[1];
   document.body.scrollTop = document.getElementById(anchor).offsetTop; // Comment me out if you don't want scroll to occur
})
div, a{
  margin-bottom: 1000px;
  width:100%;
  float: left;
  display: block;
}
<a href="#test" id="preventAnchor">Test</a>



<div id="test">test</div>

要回答弹出窗口仍然如何显示的问题 - 通常这将通过使用 javascript 通过添加类或直接更改其样式属性来更改样式来实现。有时它们也会在显示之前通过 AJAX 填充,甚至在单击链接时动态创建。有时保留 anchor 链接是个好主意,这样别人就可以直接打开对话框 - 想想如果你刷新页面或在弹出窗口打开时将其加入书签 - 你可以让你的页面检查 anchor 并将用户直接带到那个特定的弹出窗口。

如果您想删除散列但仍然导航到 anchor ,您可以使用不带 preventDefaulthistory.replaceState 这应该适用于大多数现代浏览器或使用 preventDefault 并设置 document.body.scrollTop 正如我在上面的示例中所做的那样,后一种解决方案将与不支持 history API 的旧浏览器更加兼容。

关于javascript - 单击包含标签的链接时,不要将标签添加到 URL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41894250/

相关文章:

javascript - 在 chrome 中,当用户在我的网站中拖动缩略图时,它如何显示完整尺寸的图像 url?

javascript - 表单更改时使用 jQuery 发送到 url

javascript - 如何限制 JQuery 克隆 Div 的数量?

html - 图像在浏览器预览中质量下降

jquery - 如何等待淡出效果然后删除元素?

javascript - react 。为什么 this.state 没有正确更新?

javascript - 是否可以延迟计算的可观察对象,直到某些 UI 元素变得可见?

asp.net-mvc-3 - 将列表从 View 传递到 Controller

Javascript:输入框 - 首字母自动大写但可以覆盖

javascript - 跨多个html的通用js文件和全局变量引用