我想创建一个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);
答案 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)