从网址中删除错误的内容

时间:2013-04-09 17:44:58

标签: c# asp.net url anchor query-string

我有一个类似于index.aspx的网址,但是当我点击链接到anchor标记的按钮时,会添加#video

所以它会看起来

index.aspx#video

是否可以从#video移除url

1 个答案:

答案 0 :(得分:0)

我没有得到太多反馈,所以由于你的问题含糊不清,这里有三个选项。

选项1 - 使用锚点位置,移除锚点,适当地重新滚动窗口。

您可以使用此article引用的location.hash访问#值。不幸的是,只要您设置location.hash ='',页面就会重新导航到屏幕顶部(并在URL中留下#符号)。如果您设置location.href,页面将导航离开页面,丢失任何存储的局部变量。

您可以做的一件可能的工作如下:

function RemoveHash(){
  var y = location.hash.substring(1, location.hash.length);
  location.hash = '';
  window.scrollTo(0, y);
}

这样做的缺点是屏幕会在屏幕移回顶部并返回到您的位置时闪烁。另一种方法是使用锚点,而不是使用锚点,找到页面上元素的位置,但根据我的经验,这是不准确的,并且在浏览器之间有所不同,并成为维护问题。 JQuery库可能会有所帮助,但如果沿着这条路走下去,可能值得研究。

选项2 - 获取没有锚标记的网址

您可以使用替换RegEx从网址中删除锚点,您可以使用以下内容:

location.href.replace(/\#\w+/g, "");

选项3 - 不要使用锚点并使用JavaScript滚动

您可以不使用锚点,只需按照此tutorial使用JavaScript滚动到正确的位置即可。基本思路是获取元素的滚动偏移量并将屏幕滚动到该位置。

function elmYPosition(eID) {
    var elm = document.getElementById(eID);
    var y = elm.offsetTop;
    var node = elm;
    while (node.offsetParent && node.offsetParent != document.body) {
        node = node.offsetParent;
        y += node.offsetTop;
    } return y;
}

并使用超链接调用javascript:

<a href="javascript:void(0);" onclick="window.scrollTo(0, elmYPosition('myAnchor'))>myAnchor</a>