作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试使用我自己编写的 chrome 插件修改网页。我想在现有链接之前添加一个附加链接。
我正在使用 insertAdjacentHTML 在原始链接之前添加我的新链接。但是,一旦我使用 a href,它就会失败。
更新正如许多人指出的那样,我的代码中存在语法错误。我修好了这些
这是新代码(但仍然无法正常工作...我想更改的网页似乎永远加载但没有任何反应):
var anchors = document.getElementsByTagName("a");
for (var i = 0; i < anchors.length; i++) {
anchors[i].href = "javascript:void(0)";
anchors[i].insertAdjacentHTML("beforebegin", "<a href='www.google.de'> bold text</a>")
}
如果我不添加“a href”,整个代码可以正常工作。所以这有效:
anchors[i].insertAdjacentHTML("beforebegin", "<b> bold text</b>")
如果我尝试使用标签 .. 它会以某种方式失败 - 你能告诉我为什么吗?
更新2我终于能够解决这个问题:我不小心创建了一个无限循环。 @Andy 的回答指出了解决方案。
最佳答案
除了拼写错误外,代码的最大问题是 getElementsByName
返回一个 anchor 节点的实时列表。这在适当的情况下可能很有用,但在循环中,每次迭代都会向列表中添加一个新 anchor ,因此循环永远无法完成并且浏览器会挂起。为了防止这种使用 querySelectorAll
.它返回一个静态列表。
var anchors = document.querySelectorAll('a');
for (var i = 0; i < anchors.length; i++) {
const newAnchor = '<a href="www.google.de">bold text</a>';
anchors[i] = 'javascript:void(0)';
anchors[i].insertAdjacentHTML('beforebegin', newAnchor);
}
<a href="www.google.com">Google</a>
<a href="www.bert.com">Bert</a>
<a href="www.ernie.com">Ernie</a>
从长远来看,如果您要大量使用 JS 和 HTML 进行编码,您可能会发现始终对 JS 字符串等使用单引号,对 HTML 属性使用双引号会更容易。这样,您必须转义引号的次数就会受到限制。
您还会发现使用像 VSCode 这样的体面的代码编辑器可以帮助您在代码到达浏览器之前看到代码中的拼写错误。
关于javascript - 将 insertAdjacentHTML 与 <a href...> 一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53012307/
我是一名优秀的程序员,十分优秀!