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

时间:2015-12-23 23:14:37

标签: javascript dom nodelist

我正在尝试抓取一个非常旧的网站以获取特定标记,我需要通过它来获取= =属性。所以我使用了这段代码。

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

由于某种原因,它返回undefined,但我现在使用这个脚本已经有几天了,它就像一个魅力。这是有趣的部分。在浏览器控制台中键入该命令将导致undefined。但是单独打字:

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

将返回正确的NodeList。为什么它不会分配给变量......?

编辑:似乎删除var并在没有它的情况下键入character会使其正常工作。它已经解决但我仍然希望得到答案,为什么会发生这种情况"?

EDIT2:

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...,它将在浏览器中运行并返回NodeList

我在一个非常hacky的脚本中让它像这样工作。它奏效了。

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循环。

2 个答案:

答案 0 :(得分:0)

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

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

  

编辑:似乎删除var并输入没有它的字符将使其工作。它已经解决了

我担心你现在正在创建一个全局范围变量。或者字符是该范围内已定义的变量。

答案 1 :(得分:0)

Buhah,正如我在编辑3中所说,“唯一的区别是for循环”。我忙于尝试在与DOM相关的事情中找到答案,这是我在编程中犯过的最简单的错误。

请参阅?

char_1

使用...

for(var i = 0...)

0!我在浏览器中测试char_1而不是char_0。哪 - 真的 - 返回[]而不是有用的东西。是时候休假了,我猜,我的大脑似乎已经存在了。 :)