无法将 querySelectorAll() 分配给变量 - 奇怪的行为

Can't assign querySelectorAll() to a variable - weird behaviour

我试图为特定标签抓取一个非常古老的网站,我需要通过它的 for= 属性来获取它。所以我用了这段代码。

var character = document.querySelectorAll("label[for=char_1]");

出于某种原因,它 return 是 undefined,但我已经使用这个脚本几天了,它的效果非常好。这是有趣的部分。在浏览器控制台中键入该命令将导致 undefined。但是单独输入:

document.querySelectorAll("label[for=char_1]");

会return一个合适的NodeList。为什么它不会分配给变量...?

edit:似乎删除 var 并在没有它的情况下键入 character 会使它起作用。它已解决,但我仍然很想得到 "why is this happening"?

的答案

编辑2:

for (var i = 0; i < 15; i++) {
    var character = document.querySelectorAll("label[for=char_" + i +"]");
    console.log(character); // this will return [] from the script.
    var color = character[0].children[0].style.color;
}

一个简单的for循环。我得到的只是 Cannot read property 'children' of undefined。但我可以输入完全相同的命令 document.querySelectorAll...,它会在浏览器中运行,并且会 return NodeList.

我在一个非常复杂的脚本中让它像这样工作。成功了。

var character1 = document.querySelectorAll("label[for=char_1]");
var characterColor1 = character1[0].children[0].style.color;

edit3:

var character1 = document.querySelectorAll("label[for=char_1]");
var characterColor1 = character1[0].children[0].style.color;

var character2 = document.querySelectorAll("label[for=char_2]");
var characterColor2 = character2[0].children[0].style.color;
// ...

上面的代码没有任何问题。我不认为它 DOM 没有准备好,因为这段代码也是来自 Greasemonkey 脚本的 运行 并且它可以工作。唯一的区别是 for 循环。

var x = ""; // returns undefined, because it's a var assignment.
var elements = document.querySelectorAll('div');

这是粘贴到控制台时的预期行为。

edit: It seems that deleting var and typing character without it will make it work. It's resolved

恐怕您现在正在创建一个全局范围变量。或者 characters 可能是该范围内已定义的变量。

Buhah,正如我在编辑 3 中所说 "the only difference is the for loop"。我太忙于在 DOM 相关的事情中寻找答案,以至于我犯了编程中最简单的错误。

看到了吗?

char_1

与...

for(var i = 0...)

0!我在浏览器中测试 char_1 而不是 char_0。哪个 - 真的 - returns [] 而不是有用的东西。我想是时候去度假了,我的大脑似乎已经在那里了。 :)