querySelector 返回 String 而不是 DOM-Element
querySelector returns String instead of DOM-Element
我试图解析此页面上的颜色名称:http://www.google.com/design/spec/style/color.html#
使用此代码:
var all = document.querySelectorAll(".color-group");
for(var i=0; i<all.length; i++){
var e = all[i];
var name = e.querySelector('span.name');
console.debug(name.innerHTML);
}
但是,打印结果始终undefined
。
但是,此略有更改的代码有效:
var all = document.querySelectorAll(".color-group");
for(var i=0; i<all.length; i++){
var e = all[i];
var name = e.querySelector('span.name').innerHTML;
console.debug(name);
}
唯一的区别是我直接访问querySelector
的结果,而不是通过name
变量。
我用Chrome,Safari和Firefox尝试过,它们都没有返回颜色名称。然而,IE这次努力做到了。
这是一般错误或功能还是网站问题?
如果在全局范围内运行该代码,则变量name
与 window.name
(字符串)的变量冲突;请考虑创建一个范围:
(function() {
var all = document.querySelectorAll(".color-group");
for(var i=0; i<all.length; i++){
var e = all[i];
var name = e.querySelector('span.name');
console.debug(name.innerHTML);
}
}());
或者,只需在常规命名函数中运行该代码,并从全局范围调用该代码。
变量name
似乎有一些特别之处。
var name = 3; name
// => "3"
var dame = 3; dame
// => 3
即使空白标签页(至少在 Chrome 中)也会表现出这种行为。如果你把你的变量命名为别的东西,它就会消失。我相信(!)原因是您在控制台中执行,而name
总是指的是window.name
;如果您在脚本中运行它,它会消失;但我不是100%确定我的解释是正确的。
相关文章:
- delete在Object上效率低下,但在DOM Element's的数据属性,与null out相比
- element.html() 在 DOM 就绪时返回空
- HTML DOM - element.appendChild() 的行为不像我期望的那样
- getElementById 在加载 dom 后返回未定义
- 扫描 DOM 并返回或操作具有以特定字符串为前缀的特定属性的元素
- passing "this" dom element -jquerymobile, zend-
- querySelector 返回 String 而不是 DOM-Element
- ExtJs 6.0-Ext.dom.Element.query()-属性中的多个值-正确的选择器
- jquery在DOM中返回了Kendo网格的意外类型
- 添加元素后,dom.byId返回undefined
- 从Ajax生成的DOM元素返回id
- ajax函数,用于从2个服务器端脚本向2个DOM目标返回值
- jQuery:为什么index()在动态改变DOM后返回-1
- Angular2:如何用Javascript从index.html中访问DOM-Element(在Component内部
- 仅在IE上,表单DOM id返回“”;为空或不是对象“;问题
- DOM TreeWalker返回所有文本节点
- 在JQuery中添加之前,检查DOM Element是否自动存在
- 新添加的DOM元素返回null
- Polymer.dom(element).innerHTML 不起作用
- 解析EXT .dom. buttonelement文件的EXT .dom. element依赖失败