是否可以通过属性的值获取元素id并将属性设置为parentNode

时间:2015-02-27 15:49:50

标签: javascript

我试图通过href值获取一个元素,并获取该元素的parentNode,最后将parentNode设置为一个属性。

这是一段代码,解释了我正在尝试做的事情:

        var uri = "index.html"; //just for the example
        var elementA = document.querySelector("." + uri);
        var elementLi = elementA.parentNode;
        elementLi.setAttribute("class", "current-menu-item");

它说的问题:未捕获的TypeError:无法读取null的属性'parentNode'

我读了几个与我类似的问题,但没有人解决它。 据我所知,querySelector没有给出你可以对元素做的所有功能,因为这个方法返回一个静态列表。

有可能做我想在这里做的事吗?

如果我的问题不明确,请发表评论,让我知道我会尝试改善这个问题

1 个答案:

答案 0 :(得分:1)

不推荐使用属性节点,只需使用 setAttribute method

elementLi.setAttribute("class", "current-menu-item");

但是,您的实际问题是elementLiundefined,因为elementA不是元素节点 - querySelectorAll会返回您需要循环的节点集合!

var uri = "index.html"; //just for the example
var elementsA = document.querySelectorAll("a[href="+JSON.stringify(uri)+"]");
for (var i=0; i<elementsA.length; i++) {
    var elementLi = elementsA[i].parentNode;
    elementLi.setAttribute("class", "current-menu-item");
}

如果您使用querySelector仅获取单个元素,它仍可能是null,所以最好检查一下:

var uri = "index.html"; //just for the example
var elementA = document.querySelector("a[href="+JSON.stringify(uri)+"]");
if (elementA) {
    var elementLi = elementA.parentNode;
    elementLi.setAttribute("class", "current-menu-item");
}