完全新的JavaScript。执行一个getElementsByName查询并获得一个节点列表,但是我正在寻找一个htmlcollection。我知道这是由于Dom级别的实施。getElementsByName返回nodelist或htmlcollection
Qustion: 我应该测试一种返回类型吗?还是有更好的方法来确保结果?
完全新的JavaScript。执行一个getElementsByName查询并获得一个节点列表,但是我正在寻找一个htmlcollection。我知道这是由于Dom级别的实施。getElementsByName返回nodelist或htmlcollection
Qustion: 我应该测试一种返回类型吗?还是有更好的方法来确保结果?
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;
}
Node节点的instanceof节点有什么问题? – Pudge601
(我认为)问题是如果你在一个不同的框架中的节点列表上这样做,它不会有其他框架的NodeList继承。 'list instanceof Array'也是一样。这就是为什么使用Object的toString方法总是很好的原因。 –
getElementsByName()返回所有元素的HTMLCollection,该元素具有name属性的给定值。 – Rinku
HTMLCollection是一个节点列表。假设HTML DOM中的集合是活的,意味着它们在底层时会自动更新。 NodeList接口提供了一个有序的节点集合的抽象,而没有定义或约束如何实现这个集合。 DOM中的NodeList对象是活动的。 – Rinku
根据我发现的规范,它应该返回一个NodeList http://www.w3.org/TR/DOM-Level-2-HTML/html.html#ID-71555259 – Pudge601