0

私の特定の状況は、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", "#");

このエラーがスローされる理由についてのヘルプは大歓迎です。

4

3 に答える 3

1

.hasAttribute()trueブール値またはを返しますfalse。したがって、workingAttは に等しいtrueかになりますfalsevalueブール値は HTMLElements ではないため、属性を持ちません。そのため、エラーが発生します。

のようなことをしようとしているようselect elements where there is a href attributeです。

もしそうなら、あなたはそれらをフィルタリングすることができます:

var myElements = [];

[].filter.call(elemArr, function(el) {
    if(el.hasAttribute(att)) {
        myElements.push(el);
    }
});

// then, do something with myElements
于 2015-06-08T16:00:48.347 に答える
0

コードにいくつかのエラーがあります。

  1. elemArr.hasAttributeの代わりにelemArr[i].hasAttribute
  2. var workingAtt = elemArr.hasAttribute(att);— ここでworkingAttはブール値になり、workingAtt.value存在しません。を使用elemArr[i].getAttribute(att)し、後でworkingAtt, NOTを使用する必要がありますworkingAtt.value(再び存在しなくなります!)。
  3. if (workingAtt.value === filePath)比較しているのに対し、関数で渡すものとfilePath最も確実に比較する必要があります。value
于 2015-06-08T16:07:47.060 に答える