我的具体情况是我试图从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/

10-09 17:00