1

我正在使用 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

为什么 top 设置为 [object Window] 而不是 49?

4

2 回答 2

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);

以上应该可以工作,但是不建议隐藏现有的全局变量,我强烈建议您选择另一个变量名称,除非您的代码不在全局范围内运行。

于 2013-04-09T18:51:18.930 回答
1
top=ulCorner.getAttribute("yCoord");

您在这里创建了一个隐式(并且偶然)的全局变量,即全局对象的一个​​属性。全局对象window在浏览器中,并且window.top不可写的“对窗口层次结构中最顶层窗口的引用”。所以你的分配没有效果,它只返回顶部window(其字符串化为"[object Window]")。

要解决此问题,只需添加var关键字

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");
于 2013-04-09T18:51:26.003 回答