2011-06-23 62 views
4

我是文档对象模型的新手。有没有像DOM的东西的任何Java文档。我有困难的时间搞清楚下面的JavaScript代码。访问网络上的DOM信息

myElements = document.getElementById('idName').elements // whose attribute is elements part of ? Element Object or Node? 
for (var eachElement in myElements) { 
    if (myElement[eachElement].type == 'checkbox') { 
     // why do I have to do this? Specifically, why can't type be accessed as eachElement.type == 'checkbox' 
    } 
} 

我认为更大的问题是我在访问文档时遇到困难。任何线索都将不胜感激。

+3

Mozilla的DOM参考:https://developer.mozilla.org/en/Gecko_DOM_Reference – Karolis

+0

我没有看到元素对象中的元素属性? – kuriouscoder

+1

idName是一种形式。所以,你需要HTMLFormElement:https://developer.mozilla.org/en/DOM/HTMLFormElement – Karolis

回答

2

前面已经提到的,MDC documentation是相当全面。

//为什么我必须这样做?具体而言,为什么不能类型来作为eachElement.type == '复选框'

.elements返回HTMLCollection[docs]访问。这是一个数组结构,如数据结构可以通过forfor...in[docs]循环遍历。

for...in在对象的属性上循环。 属性名称(索引,可以这么说,不是它的值)存储在循环变量中,因此,要访问相应的值,必须编写obj[prop]

这也是你不应该在这里使用for...in的原因。你不知道它是否也循环而不是元素的集合的其他属性。

使用正常的for循环:

var myElements = ...; 
for(var i = myElements.length; i--;) { 
    var element = myElements[i]; 
    //... 
} 

我建议也可以参考JavaScript guide更多地了解循环,数组和对象。

2

.elements属性仅对form元素https://developer.mozilla.org/en/DOM/HTMLFormElement你的情况

所以存在,idName必须指向与id="idName"一个表单元素,否则会导致错误。

elements属性将返回表单控件的集合。 https://developer.mozilla.org/en/DOM/form.elements

+0

然后有一个节点,为什么我不能再次从NodeList引用而访问类型。 相反,为什么我必须访问myElement [eachElement] .type =? – kuriouscoder

+2

@kuriouscoder:这就是循环的工作原理。看看https://developer.mozilla.org/en/JavaScript/Reference/Statements/for... –

+0

@ kuriouscoder,Felix的回答很详细地解释了这一点。 –

0

这里是这样说的:

myElements = document.getElementById('idName').elements 
//Find the form with the id="idName" 
//and gather all the form elements in an object/array 

//because there could be more than one element in the form, 
//you will need to loop through the object 

//loop now and for each element that is a checkbox 
//do the following, where it says DO SOMETHING 

for (var eachElement in myElements) { 
    if (myElement[eachElement].type == 'checkbox') { 

    //DO SOMETHING 

    } 
}