【发布时间】:2017-05-23 04:26:44
【问题描述】:
对于将锚标记插入 HTML 服务器端的网页,我可以通过手动更改地址栏中 URL 末尾的哈希标记或在无需重新加载页面即可将我带到本地锚点的同一页面 (<a href="#mytag">gotomytag</a>)。
我注意到如果页面上的锚标记是使用 JavaScript 生成的,这将不起作用。除非我做错了什么,否则我将得出结论,JavaScript 生成的井号标签对于 URL 中包含的锚标签的导航是不可见的。
为了让事情更清楚,这里的顺序不起作用:
导航到 mysite.com/mypage.php
</body>标签之前的 JavaScript 添加了我的锚标签 (<a name="here"></a>)我把地址栏中的URL改成“mysite.com/mypage.php#here”
我希望浏览器导航到标签。但事实并非如此。没有任何事情发生,就好像标签不存在一样。如果我在服务器端包含步骤 2 中添加的锚标记,则此步骤将按预期导航到锚。
另外,我正在使用以下 sn-p 创建我已确认使用内置 chrome 调试器正常工作的元素:
`var ael = document.createElement('a');
ael.setAttribute('name','here');
someelementinmyhtmldom.appendChild(ael);`
我希望这里有人可以纠正我或确认我的发现并提出解决方法。
我在 Windows 7 上使用 Chrome 版本 55.0.2883.87。
谢谢。
编辑:我的初始代码不起作用的原因: 我的问题的答案在下面的帖子中给出,但如果您对我的代码为什么不起作用感兴趣:我了解到您无法导航到被其他元素隐藏的锚标记!我将我的锚元素放置在它应该在的位置上方大约 50 像素(使用绝对位置),以补偿顶部的粘性菜单栏,这使得我的锚由于其包含元素的溢出:隐藏属性而消失。解决方案:确保你的锚点没有被其他元素覆盖,也没有因为移动到溢出被隐藏的元素之外。
【问题讨论】:
-
您需要显示正在修改您的代码的 JavaScript。确保您使用的是
document.createElement,而不是.innerHTML = ... -
值得指出的是,
<a>元素的name属性在HTML5下被认为是过时的;现在链接片段/哈希通过其id属性链接到特定的 HTML 元素。 -
@DavidThomas 这是一个很好的观点(我的答案使用了
id,甚至没有考虑name),但我认为name仍然可以在绝大多数用户代理中工作以实现向后兼容性.不过我可能是错的,因为我使用id已经有一段时间了。 -
@Scott:几乎肯定会,但最好不要依赖过时的功能。
-
@DavidThomas 绝对!
标签: javascript html url anchor hashtag