2013-04-09 54 views
1

我正在使用JavaScript向DOM文档写出一组分层元素,并且正在使用FireFox 20.0上的FireBug进行调试。根据我在使用FireBug检查DOM时看到的内容,看起来写出来的效果很好。感兴趣的部分具有以下结构。getAttribute返回[对象窗口]而不是值

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

什么是elemant?也许'​​':-) – Bergi 2013-04-09 18:44:04

+0

我正在编程生成DOM树。没有涉及XML文件。 AFAIK无法使用JavaScript将树结构输出到文件,因为它是客户端语言。谢谢,彼得。 – OtagoHarbour 2013-04-09 18:52:40

+0

呵呵,为什么你用XML代替普通的JS对象呢?但是,您可以通过使用XMLSerializer将字符串化为XML,请参阅https://developer.mozilla.org/en-US/docs/Parsing_and_serializing_XML – Bergi 2013-04-09 18:54:54

回答

3

topwindow对象上现有的属性和它的上面应该工作,但它不建议阴影现有的全局变量不可写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); 

,我强烈建议你选择另一变量名称,除非您的代码不在全局范围内运行。

+0

这是我的问题。我将变量更改为不同的名称,并解决了问题。我发现把var放在top之前,为了使变量局部化,也解决了这个问题。非常感谢! – OtagoHarbour 2013-04-09 19:40:11

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 ulCorner=upperElement.getElementsByTagName("ulCorner")[0], 
    top=ulCorner.getAttribute("yCoord"), 
    left=ulCorner.getAttribute("xCoord"); 
+0

是的!这是问题所在。我忘了通过预先添加var或使用非保留的变量名来创建变量local。非常感谢! – OtagoHarbour 2013-04-09 19:44:27

相关问题