我正在使用JavaScript向DOM文档写出一组分层元素,并在FireFox 20.0上使用FireBug进行调试。根据我在使用FireBug检查DOM时看到的内容,似乎写出来的很好。感兴趣的部分具有以下结构。
childNodes NodeList[ulcorner, lrcorner]
- 0 ulcorner
accessKey ""
accessKeyLabel""
- attributes [xcoord="134", ycoord="49"]
+ 0 xcoord="134"
+ 1 ycoord="49"
然而,当我打电话
var ulCorner=upperElement.getElementsByTagName("ulCorner")[0];
top=ulCorner.getAttribute("yCoord");
left=ulCorner.getAttribute("xCoord");
console.log('top=' + top + ', left=' + left);
我得到了
top=[object Window], left=134
为什么顶部设置为[对象窗口]而不是49?
答案 0 :(得分:4)
top
是window
对象上的现有属性,并且不可写 https://developer.mozilla.org/fr/docs/DOM/window.top
var ulCorner=upperElement.getElementsByTagName("ulCorner")[0];
var top=ulCorner.getAttribute("yCoord");
var left=ulCorner.getAttribute("xCoord");
console.log('top=' + top + ', left=' + left);
以上内容应该有效,但不建议隐藏现有的全局变量,我强烈建议您选择另一个变量名,除非您的代码不在全局范围内运行。
答案 1 :(得分:1)
top=ulCorner.getAttribute("yCoord");
您在这里创建一个隐式(和意外)全局变量,即全局对象的属性。浏览器中的全局对象为window
,而window.top
是不可写“对窗口层次结构中最顶层窗口的引用”。因此,您的作业无效,只返回顶部window
(其字符串化为"[object Window]"
)。
要解决此问题,只需添加var
keyword:
var ulCorner=upperElement.getElementsByTagName("ulCorner")[0];
var top=ulCorner.getAttribute("yCoord");
var left=ulCorner.getAttribute("xCoord");
或使用多个var语句:
var ulCorner=upperElement.getElementsByTagName("ulCorner")[0],
top=ulCorner.getAttribute("yCoord"),
left=ulCorner.getAttribute("xCoord");