我试图通过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
没有给出你可以对元素做的所有功能,因为这个方法返回一个静态列表。
有可能做我想在这里做的事吗?
如果我的问题不明确,请发表评论,让我知道我会尝试改善这个问题
答案 0 :(得分:1)
不推荐使用属性节点,只需使用 setAttribute
method:
elementLi.setAttribute("class", "current-menu-item");
但是,您的实际问题是elementLi
为undefined
,因为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");
}