我试图获取特定div中的所有表单元素,并使用数组concat()方法将它们组合成单个数组:
var div_id = 'some_div_id'; // in real life this is passed as a function parameter
var child_inputs = document.getElementById(div_id).getElementsByTagName('input');
var child_textareas = document.getElementById(div_id).getElementsByTagName('textarea');
var child_selects = document.getElementById(div_id).getElementsByTagName('select');
var field_elements = child_inputs.concat(child_textareas, child_selects); // this doesnt work?
然而,脚本在最后一行失败,我不知道为什么。我不能使用.childNodes,因为传递的div_id不是直接父级。
答案 0 :(得分:4)
getElementsByTagName
会返回NodeList
而不是数组,因此您无法使用concat
。
如果要将nodeList“转换”为数组,可以从Array原型链中调用slice:
var div_id = 'some_div_id',
divIdElement = document.getElementById(div_id); //cache the element
var getArrayFromTag = function(tagname) {
//get the NodeList and transform it into an array
return Array.prototype.slice.call(divIdElement.getElementsByTagName(tagname));
}
//Get the arrays
var child_inputs = getArrayFromTag('input');
var child_textareas = getArrayFromTag ('textarea');
var child_selects = getArrayFromTag ('select');
//use concat
var field_elements = child_inputs.concat(child_textareas, child_selects);
答案 1 :(得分:1)
这些方法不会返回数组。相反,它是NodeList或HTMLCollection。 (见the note under Syntax.)
你可以loop over each nodelist并手工制作一组数组'。