使用HTML基础标签的URL哈希

12

window.location.hash

在使用链接进行 JavaScript 操作时,我通常会这样做:

<a href="#">Link Text</a>

这样,当有人在页面加载之前点击链接时,不会发生什么可怕的事情。

HTML基础标签

在我的当前项目中,我使用相同的结构,但是加上了基础标签:

<html>
<head>
    <base href="http://example.com/" />
</head>
<body>
    <a href="#">Link Text</a>
</body>
</html>

然而,如果页面的url为:

http://example.com/dir/page

点击链接会导航到

http://example.com/#

不是……而是

http://example.com/dir/page#

我该如何修复这个问题?


不要使用“foo.com”。请参阅RFC 2606:http://www.rfc-editor.org/rfc/rfc2606.txt - Joel Coehoorn
7个回答

11

要么删除base标签,要么将href属性更改为完全合格的。当您混合使用basea元素时,您观察到的是预期的行为。


1
+1 Brad,你试图解决一个本来不存在的问题。你真的需要使用基础标签吗? - roborourke

3

如果你想使用a标签,另一种解决方法是不要使用#作为href目标(当你不指定目标时,它会导致页面跳转到顶部,这是我不想要的)。你可以这样做:

<a href="javascript:">Some Link that Goes nowhere</a>

其实,除非你需要将它作为 a 标签使用,否则 span 标签可能是最好的选择:

CSS:

.generic_link {
  text-decoration:underline;
}
.generic_link:hover {
  text-decoration:none;
}

HTML:

<span class="generic_link">Something that really isn't a link</span>

请参考Gumbo的评论,从点击处理程序返回false可以阻止链接被跟踪。通常最好避免使用javascript: URL。 - bobince

1

我支持这个提议。如果它实际上不去任何地方,可以使用<span>或其他东西。 - Zack The Human
2
这对键盘用户有负面影响:现在您无法聚焦元素。在这里使用<button>/<input type="button">是有争议的。 - bobince
同样适用于 iOS 上的移动用户。仅带有 href 属性的 <a> 标签会触发 onclick,至少在我使用过的 iOS 版本中是这样。 - alanaktion

0
<html>
<head>
    <base href="http://example.com/" />
</head>
<body>
    <a href="./dir/page#">Link Text</a>
</body>
</html>

0

我以前也遇到过同样的问题。
我有一个链接,我希望它是空的,可以链接到当前页面。
如果没有base html element,这将只是一个带有href="#"a元素。

我的示例不使用base html元素,

<li>
    <a href="#"><div>The text of my Link</div></a>
</li>

我找到的解决方案相同的例子,

<li style="cursor: pointer !important;">
    <a href="#" style="pointer-events: none;"><div>The text of my Link</div></a>
</li>

这个解决方案只使用CSS来禁用链接。

通过第一个CSS规则cursor: pointer !important;,我确保此链接将具有正确(对于我的情况)的指针图标。
通过第二个规则pointer-events: none;,我确保此链接不可点击。
您可以通过this link了解更多关于此规则的信息。


0

onclick 事件中返回 false 以禁用链接:

<a href="#" onclick="doSomething(); return false">Link Text</a>

(这只是一个内联声明的示例。但尽量避免内联声明并使用渐进增强技术。)


OP指定“这样,当有人在页面加载之前点击链接时,不会发生什么可怕的事情”,这表明onclick处理程序尚未附加。内联JavaScript很丑,应该避免使用。 - Gareth
在您的编辑之后,渐进增强是导致此问题的原因。问题在于用户在额外的点击处理程序添加之前就点击了“链接”。在这种情况下,无法避免链接导航。解决方案是将其设置为“非链接”。 - Gareth
或者,当然也可以将其变成一个链接,使其具有等效的非JavaScript操作。根据操作是什么,这可能是最好的解决方案。 - Gareth

-1

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接