链接必须具有要指定的href 目标才能使其成为可用的显示对象。
大多数浏览器不会解析href 元素的href 中的高级JavaScript,例如:
<a href="javascript:var el = document.getElementById('foo');">Get element</a>
由于大多数浏览器中的href 标记不允许空格或将空格转换为%20(空格的十六进制代码),因此 JavaScript 解释器会遇到多个错误。
因此,如果您想使用 <a> 元素的 href 执行内联 JavaScript,您必须首先为 href 指定一个不太复杂(不包含空格)的有效值,然后提供事件属性标签中的 JavaScript,例如 onClick、onMouseOver、onMouseOut 等。
典型的答案是这样做:
<a href="#" onclick="var el = document.getElementById('foo');">Get element</a>
这很好用,但它会使页面滚动到顶部,因为href 中的# 告诉浏览器这样做。
在<a> 元素的href 中放置# 指定根锚点,默认情况下位于页面顶部,但您可以通过在@987654340 中指定name 属性来指定不同的位置@元素。
<a name="middleOfPage"></a>
然后您可以更改 <a> 元素的 href 以跳转到 middleOfPage 并在 onClick 事件中执行 JavaScript:
<a href="#middleOfPage" onclick="var el = document.getElementById('foo');">Get element</a>
很多时候你不希望那个链接跳来跳去,所以你可以做两件事:
<a href="#thisLinkName" name="thisLinkCame" onclick="var elem = document.getElementById('foo');">Get element</a>
现在点击时它不会去任何地方,但它可能会导致页面从当前视口重新居中。
使用<a> 元素的href 使用内联javascript 的最佳方法是JavaScript:void(0);,但不必执行上述任何操作:
<a href="javascript:void(0);" onclick="var el = document.getElementById('foo');">Get element</a>
这告诉浏览器不要去任何地方,而是在href 中执行JavaScript:void(0); 函数,因为它不包含空格,并且不会被解析为 URL。它将由编译器运行。
void 是一个关键字,当提供0 参数时返回undefined,它不再使用任何资源来处理在没有指定0 的情况下会出现的返回值(它更多内存管理/性能友好)。
接下来发生的事情是onClick 被执行。页面没有移动,显示方面没有任何反应。