2013-06-06 48 views
0

完全新的JavaScript。执行一个getElementsByName查询并获得一个节点列表,但是我正在寻找一个htmlcollection。我知道这是由于Dom级别的实施。getElementsByName返回nodelist或htmlcollection

Qustion: 我应该测试一种返回类型吗?还是有更好的方法来确保结果?

+0

getElementsByName()返回所有元素的HTMLCollection,该元素具有name属性的给定值。 – Rinku

+0

HTMLCollection是一个节点列表。假设HTML DOM中的集合是活的,意味着它们在底层时会自动更新。 NodeList接口提供了一个有序的节点集合的抽象,而没有定义或约束如何实现这个集合。 DOM中的NodeList对象是活动的。 – Rinku

+0

根据我发现的规范,它应该返回一个NodeList http://www.w3.org/TR/DOM-Level-2-HTML/html.html#ID-71555259 – Pudge601

回答

1
function isNodeList(nodes) { 
var result = Object.prototype.toString.call(nodes); 
if (typeof nodes === 'object' && /^\[object HTMLCollection|NodeList|Object)\]$/.test(result) && nodes.hasOwnProperty('length') && (nodes.length == 0 || (typeof nodes[0] === "object" && nodes[0].nodeType > 0))) { 
    return true; 
} 
    return false; 
} 
+0

Node节点的instanceof节点有什么问题? – Pudge601

+0

(我认为)问题是如果你在一个不同的框架中的节点列表上这样做,它不会有其他框架的NodeList继承。 'list instanceof Array'也是一样。这就是为什么使用Object的toString方法总是很好的原因。 –

相关问题