Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/454.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript DOM元素的对象表示法_Javascript_Dom - Fatal编程技术网

Javascript DOM元素的对象表示法

Javascript DOM元素的对象表示法,javascript,dom,Javascript,Dom,在下面的示例中,DOM元素有一个类似数组的对象,有一点我不清楚 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Conten

在下面的示例中,DOM元素有一个类似数组的对象,有一点我不清楚

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>

<script type="text/javascript">
window.onload = function(){

    for(var prop in document.links){
        alert(prop); // It does not alert foo!
    }

}
</script>
</head>
<body>

<a name="foo" href="#">foo</a>

</body>
</html>

无标题文件
window.onload=函数(){
for(document.links中的var prop){
警惕(道具);//它不警惕foo!
}
}
理论上,访问prop的对象表示法类似于:
obj.prop
。 在object array like中,对象的元素必须有数字表示法:
obj[0]
,以及
obj.length


警报发出:
0
length
namedItem
。前两个来自对象数组理论,另两个可用于访问道具



最后,这个链接可以像
document.links[0]
document.links.foo
一样找到。
文档中没有
foo
道具。链接
。为什么?谢谢。

您正在将DOM元素本身传递给“alert()”。传递“name”属性怎么样

for(var prop in document.links){
    alert(prop.name);
}
现在,在这样的节点列表中进行迭代是个糟糕的主意:

for (var i = 0; i < document.links.length; ++i)
  alert(document.links[i].name);
for(变量i=0;i
如果需要节点的文本内容,可以尝试以下操作:

for (var i = 0; i < document.links.length; ++i)
  alert(document.links[i].innerHTML);
for(变量i=0;i
您还可以找到它的子文本节点并提取它们的值


请注意,“links”对象还将包括
标记(如果有)。

之所以
document.links.foo
不可用,是因为您使用的是
name
而不是
id
。如果将标记更改为:

<a id="foo" href="#">foo</a>

document.links是一个HTMLCollection,而不是数组,并且没有与数组相同的方法,这一事实可以解释您的一些困惑。My
alert
给出的是:0,length,item,namedItem。0表示第一个链接标记,长度表示给定对象数组的长度,这两个也是访问该标记的支柱。没有
foo
prop可以让我的JS功能逻辑正常工作:)而且它不是一个数组……))不,没有“foo”属性,因为根本没有。“links”对象是一个节点列表,它包含
元素DOM节点的列表。在您的示例中,属性“name”包含值“foo”。好的,谢谢您的回答,但请看以下内容:
document.links.foo
是链接(DOM对象),不确定
document.links.name.foo
是否是..我认为这是因为NodeList对象的语义。@Pointy
for。。。在
中迭代键而不是值。\尽管如此,
document.links
本身没有
foo
prop,即使link标记中有
id
属性。通过它迭代,将不会发出警报
foo`。。。
window.onload = function(){
    window.alert(document.links.foo.innerHTML);
}