我的具体情况是我试图从DOM中删除链接元素/使其无效(我无法控制它的生成)。我计划执行此操作的方式是通过用无意义的值替换'href'属性-之所以选择此方式而不是简单地使用disable = true
是因为该功能可以在其他场合重用更改其他属性。
我遇到的问题是.getAttribute
,它返回错误“ TypeError:elemArr.hasAttribute不是函数”。
function removeLink(elem, att, value, replacement) {
var elemArr = document.getElementsByTagName(elem);
for (var i = 0; i < elemArr.length; i++) {
var workingAtt = elemArr.hasAttribute(att);
if (workingAtt.value === filePath) {
elemArr[i].setAttribute(att, replacement);
}
}
}
removeLink("link", "href", "filePath", "#");
非常感谢您提供有关为什么会抛出此错误的任何帮助。
最佳答案
里面发生的事情是elemArr是一个数组,而数组没有hasAttribute方法。将您的代码重写为
function removeLink(elem, att, value, replacement) {
var elemArr = document.getElementsByTagName(elem);
for (var i = 0; i < elemArr.length; i++) {
//this line here wasn't referring to a specific node but the array
var workingAtt = elemArr[i].hasAttribute(att);
if (workingAtt && elemArr[i].getAttribute(att) === value) {
elemArr[i].setAttribute(att, replacement);
}
}
}
removeLink("link", "href", "filePath", "#");
它将起作用。
更简洁的方法如下所示:
function removeLink(elem, att, value, replacement){
var selector = elem + '['+ att +'="'+ value +'"]';
[].forEach.call(document.querySelectorAll(selector), function(node){
node.setAttribute(att, replacement);
});
}
它基本上做同样的事情,但是更短,更明确。
关于javascript - TagName的getAttribute-JS,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/30713903/