如何到达forEach()的最后一个元素JS
问题描述:
我已经尝试了很多解决方案,但没有为我工作。我正在循环节点元素,我想到最后一个,所以我更新它。如何到达forEach()的最后一个元素JS
app.js
var userLen = document.querySelectorAll('.username').length
document.querySelectorAll('.username').forEach(function (event) {
event[event === (userLen - 1)].innerHTML = window.localStorage.getItem('micky')
})
我每次都会收到此错误未捕获的TypeError:无法设置属性'innerHTML'的undefined。
答
您不需要遍历元素以达到最后一个元素。
此外,您正试图获得event[true]
或event[false]
作为event === (userLen - 1)
将返回一个布尔值,而不是实际的索引。
试试这个:
var nodeElememnts = document.querySelectorAll('.username');
if(nodeElements.length > 0){
nodeElements[nodeElements.length - 1].innerHTML = window.localStorage.getItem('micky');
}
答
你可以做到这一点W/O使用这里像forEach
:
var elm = document.querySelectorAll('.username');
var lastElem = [].slice.call(elm).pop();
if (lastElem) lastElem.innerHTML = 'It Works!';
// For debugging purpose
console.log([].slice.call(elm)) //<-- Convert NodeList to Array
console.log(lastElem)
<div class="username">A</div>
<div class="username">B</div>
<div class="username">C</div>
你有什么期望'事件[事件===( userLen - 1)]'是? 'event ===(userLen - 1)'是'true'或'false'(实际上它总是'false',因为'event'总是一个'HTMLElement','userLen - 1'总是一个数字;你在比较什么?),所以你正在访问'event [true]'或'event [false]',这两者都是'undefined'。这没有意义。更不用说了,因为你试图从一个'HTMLElement'访问一些索引。 – Xufox