为什么以下代码不起作用(警报未执行)? 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);
感谢。
答案 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
,根据浏览器的不同,区别不是很重要,但