如何在for循环中使用每个第二个对象?

时间:2018-04-18 22:25:26

标签: javascript

我想创建一个for循环,但我有以下问题:

document.querySelectorAll('.msg.g_bot.bot.private.i ~ .msg .usr')[0].childNodes[0].innerHTML;会返回字符串

document.querySelectorAll('.msg.g_bot.bot.private.i ~ .msg .usr')[1].childNodes[0].innerHTML;返回未定义

document.querySelectorAll('.msg.g_bot.bot.private.i ~ .msg .usr')[2].childNodes[0].innerHTML;会返回字符串

document.querySelectorAll('.msg.g_bot.bot.private.i ~ .msg .usr')[3].childNodes[0].innerHTML;返回未定义

这意味着'childNodes'的每个第二个属性都是未定义的。

var username = [];
var usernameList = document.querySelectorAll('.msg.g_bot.bot.private.i ~ .msg .usr');
for (i of usernameList) {
    var name = document.querySelectorAll('.msg.g_bot.bot.private.i ~ .msg .usr')[i].childNodes[0].innerHTML;    
    if (name !== undefined) {
        username.push(name);
    }   
}
console.log(username);

当我运行此脚本时,我总是收到错误:

  

无法读取未定义

的属性'childNodes'

我已尝试使用if (name !== undefined) {,但我不知道为什么它不起作用。

是否可以仅使用每一个第二个对象?

解决方案

也许那是因为我不明白如何使用for(),但这就是它的工作方式:

var username = [];
var usernameList = document.querySelectorAll('.msg.g_bot.bot.private.i ~ .msg .usr');
for (i of usernameList) {
    if (i.childNodes) {
        var name = i.childNodes[0].innerHTML;    
        username.push(name);
    }    
}
console.log(username);

2 个答案:

答案 0 :(得分:2)

你想做这样的事情:

for (i of usernameList) {
    var elem = document.querySelectorAll('.msg.g_bot.bot.private.i ~ .msg .usr')[i];
    if (elem.childNodes) {
        var name = elem.childNodes[0].innerHTML;    
        if (name !== undefined) {
            username.push(name);
        }
    }
}

您遇到的问题是,如果没有childNodes,那么您无法将其下标以获得childNodes[0],当然也不会childNodes[0].name - 它'不是name未定义的问题,而是导致未定义的引用链。

答案 1 :(得分:1)

我认为这不是一个很好的方法来解决你的问题,但这是你要求的:

scarlet <p="JJ"/>

我认为kshetline's答案要脆弱得多。