<!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=gbk"/>
<title>Test</title>
</head>
<body>
<form name="form1" action="" >
<input type="text" name="name1" id="id1" />
<input type="text" name="name2" id="id2" />
</form>
<div id="result" ></div>
<script type="text/javascript">
var myform=document.forms.item(0);
var result=document.getElementById('result');
var mystr;
mystr=myform.elements.namedItem("id1").tagName;
result.appendChild(document.createTextNode(mystr));
result.appendChild(document.createElement("br"));
mystr=myform["id2"].tagName;
result.appendChild(document.createTextNode(mystr));
</script>
</body>
</html>
在W3C中,一般通过属性返回的元素集合叫HTMLCollection,如document.forms.通过方法返回的叫Node List,如getElementByTagName.
HTMLCollection可以通过item方法用索引访问,索引按深度优先排序,通namedItem方法按id访问(HTML4.01支持id和name,xhtml只有id)。而Node List只能通过item来访问
而实际中所有浏览器HTMLCollection的item方法既可以用id访问又可以用name访问
对于Node List,只有Chrome在XHTML下不能通过namedItem和name访问元素(用item仍然支持id访问)。其它浏览器与HTMLCollection访问方法完全相同
至于数组语法访问HTMLCollection和Node List未见W3C有相关说明,不过从实现上看数组访问的结果与item访问的结果完全一样,也可能数组是item和namedItem的合集。
建议不要在任何时候用name访问集合中的元素。用item时也不要用id和name访问元素,当用id访问元素时要用数组语法或namedItem方法(仅HTMLCollection)。不要用id和name访问Node List
<!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=gbk"/>
<title>Test</title>
</head>
<body>
<form name="form1" action="" >
<input type="text" name="name1" id="id1" />
<input type="text" name="name2" id="id2" />
</form>
<div id="result" ></div>
<script type="text/javascript">
var myform=document.getElementsByTagName("input");
var result=document.getElementById('result');
var mystr;
mystr=myform[0].tagName;
result.appendChild(document.createTextNode(mystr));
result.appendChild(document.createElement("br"));
mystr=myform.item(1).tagName;
result.appendChild(document.createTextNode(mystr));
</script>
</body>
</html>