javascript过滤器方法不适用于getElementsByName

时间:2014-02-14 22:51:08

标签: javascript

为什么以下代码不起作用(警报未执行)? custom_table是html中的一些文件上传字段,其长度为10。

var custom_table=document.getElementsByName('custom_table');
var result = custom_table.filter( function (x)  { return x.value });
alert(result.length);

如果我在以下代码中将custom_table替换为names,则可以正常使用。

var names = new Array();
var object = { name : "Joe", value:20, email: "joe@hotmail.com"};

names.push(object);
object = { name : "Mike", value:50, email: "mike@hotmail.com"};
names.push(object);
object = { name : "Joe", value:45, email: "mike@hotmail.com"};
names.push(object);

感谢。

2 个答案:

答案 0 :(得分:2)

getElementsByName的返回值不是JavaScript数组。但是,您可以将内容复制为一个:

var custom_table=document.getElementsByName('custom_table');
custom_table = [].slice.call(custom_table, 0);

然后.filter.map等将起作用。

答案 1 :(得分:2)

getElementsByName返回HTMLCollection *,这不是数组。 filter()仅适用于数组。您可以轻松地将其转储到数组中:

var elementCollection = document.getElementsByName('myname');
var elementArray = Array.prototype.slice.call(elementCollection, 0);
elementArray.filter(...); // this will now work

*或NodeList,根据浏览器的不同,区别不是很重要,但