Javascript Can';t将querySelectorAll()赋值给变量-奇怪的行为
我试图为一个特定的标签抓取一个非常旧的网站,我需要通过它的for=属性来获取它。所以我用了这段代码Javascript Can';t将querySelectorAll()赋值给变量-奇怪的行为,javascript,dom,nodelist,Javascript,Dom,Nodelist,我试图为一个特定的标签抓取一个非常旧的网站,我需要通过它的for=属性来获取它。所以我用了这段代码 var character = document.querySelectorAll("label[for=char_1]"); 出于某种原因,它返回一个未定义的,,但我已经用了几天这个脚本了,它工作得很好。这是有趣的部分。在浏览器控制台中键入该命令将导致未定义。但仅键入以下内容: document.querySelectorAll("label[for=char_1]"); 将返回正确的节点列
var character = document.querySelectorAll("label[for=char_1]");
出于某种原因,它返回一个未定义的,
,但我已经用了几天这个脚本了,它工作得很好。这是有趣的部分。在浏览器控制台中键入该命令将导致未定义
。但仅键入以下内容:
document.querySelectorAll("label[for=char_1]");
将返回正确的节点列表
。为什么它不会分配给变量
编辑:似乎删除var
并键入character
而不使用它将使其工作。这已经解决了,但我仍然希望得到“为什么会发生这种情况”的答案
编辑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;
}
编辑3:
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');
这是粘贴到控制台时的预期行为
编辑:似乎删除var并在没有它的情况下键入字符将使其工作。解决了
恐怕您现在正在创建一个全局范围变量。或者,字符可能是该范围内已定义的变量。Buhah,正如我在编辑3中所说,“唯一的区别是for循环”。我忙着在DOM相关的事情中寻找答案,结果犯了编程中最简单的错误 看到了吗 与
for(var i = 0...)
0!我在浏览器中测试char_1而不是char_0。它真正返回的是
[]
,而不是有用的东西。我想是时候去度假了,我的大脑似乎已经在那里了 您确定字符未定义吗?或者控制台只是说未定义。如果你输入var x=10
它会说未定义,但是如果你在这之后输入x
,你会得到10
。这是“正常”的控制台行为。变量赋值显示未定义的
var character=document.querySelectorAll(“label[for=char\u 1]”);性格代码>将按预期工作。我非常确定。因为我用那个scipt作为Greasemonkey的扩展。它会抛出错误,因为它是未定义的
。也许您应该向我们展示完整的代码以及与变量范围相关的所有详细信息?@Xufox添加了一点上下文。var character=document.querySelectorAll(“label[for=char\u 1”);console.log(character);var color=character[0]。children[0].style.color;
这段代码失败,因为无法在未定义的上使用子项。但当我转到浏览器控制台并在自己中键入时,它将返回正确的节点列表(如上面所示).你能提供一个JSFIDLE来演示这个问题吗?@galkowskit-两个子项中哪一个未定义?
char_1
for(var i = 0...)