我正在尝试创建一个JavaScript ARRAY,并获取元素的子名称。
(我不需要span元素,只需输入,选择和textarea)
HTML:
<div id="new">
ID: <input name="id" />
<span>Date: </span>
<input name="date" />
<select name="status">
<option>New</option>
<option>Old</option>
</select>
<textarea name="memo"></textarea>
... etc.
</div> <!-- END: #new -->
的jQuery:
var elements=new Array();
$("#new").each(function()
{
elements = $(this).children('input, select, textarea').attr("name");
});
使用此代码,我只获得1个元素的名称(“id”)。当我测试数组时,索引为0,它可以工作。但是当我使用不同的索引时,说...提醒“日期”或“状态”,它不起作用:
alert( elements[0] ); //Output: "id"
alert( elements[2] ); //Output: "undefined". It should alert "status" instead
答案 0 :(得分:11)
一个更清洁的版本,它抓取需要用户输入的所有字段:
<强>的jQuery 强>
var elements = [];
//iterates through each input field and pushes the name to the array
$("#new :input").each(function() {
var name = $(this).attr("name");
elements.push(name);
});
是的,您需要清理HTML。应该是这样的:
<强> HTML 强>
<div id="new">
ID: <input name="id" />
<span>Date: </span>
<input name="date" />
<select name="status">
<option>New</option>
<option>Old</option>
</select>
<textarea name="memo"></textarea>
</div>
答案 1 :(得分:5)
您可以使用map
(docs) -
var arr = $("#new").children('input, select, textarea').map(function() {
return $(this).attr("name");
});
map
将遍历所选元素集中的每个元素,并将指定值返回到arr
数组中。
您还需要稍微整理一下HTML,因为您错过了一些导致children
集合填充错误的结束标记 -
<div id="new">
ID: <input name="id"/>
<span>Date: </span>
<input name="date"/>
<select name="status">
<option>New</option>
<option>Old</option>
</select>
<textarea name="memo"></textarea>
</div>
答案 2 :(得分:0)
var arr = new Array(); //initialise array
$('#new').children().each(function(){
//iterate through the children of the div -
//there shouldn't be more than one #new, unless you aren't
//following best practices :)
if ($(this).attr('name'))
{
//if the name attr is defined, push it to the array
arr.push($(this).attr('name'));
}
});
alert(arr);