我有以下HTML结构
<form action="todo.php" method="post" name="todo">
<ul>
<li>
<input name="checklist[0]" type="text">
<ul>
<li>
<input name="checklist[0][task][]" type="text">
</li>
<li>
<input name="checklist[0][task][]" type="text">
</li>
</ul>
<a class="add" href="todo.php">Add one</a> </li>
<li>
<input name="checklist[1]" type="text">
<ul>
<li>
<input name="checklist[1][task][]" type="text">
</li>
<li>
<input name="checklist[1][task][]" type="text">
</li>
<li>
<input name="checklist[1][task][]" type="text">
</li>
</ul>
<a class="add" href="todo.php">Add one</a> </li>
<li>
<input name="checklist[2]" type="text">
<ul>
</ul>
<a class="add" href="todo.php">Add one</a> </li>
</ul>
<input name="submit" type="submit" value="Submit">
</form>
jQuery代码
$( ".add" ).click(function() {
// Find the Task Count
var task_count = $(this).siblings('ul').children('li').length;
var task_name = $(this).siblings('ul').children('li').attr("name");
var input = '<li><input name="checklist[][task][]" type="text"></li>';
console.log(task_count);
console.log(task_name);
$(this).siblings('ul').append(input);
return false;
});
当我点击添加时,我希望获得Sibilling UL
的第一个孩子的NAME
属性
在上面的代码
中var task_name = $(this).siblings('ul').children('li').attr("name");
这似乎会抛弃undefined
答案 0 :(得分:1)
试试这个:您正在尝试获取name
的{{1}}属性,而是在li
中找到input
,然后获取其li
属性
name
答案 1 :(得分:1)
尝试:
var task_name = $(this).parents("li:first").find("input[name]:first").attr('name');
答案 2 :(得分:1)
$(this).siblings('ul').children('li').attr("name")
由于undefined
元素没有任何li
属性,因此会抛出name
你需要这样做: -
$(this).siblings('ul').children('li').find('input').attr("name")
或
$(this).siblings('ul').children('li').children('input').attr("name")
答案 3 :(得分:0)
您尝试执行dom manipulation
的方式是错误的。您实际上是在定位代码中的li
元素,但要求是获取input
内的li
元素。因此,您应该使用.find()
来搜索li
内的后代。
尝试,
var task_name = $(this).siblings('ul').children('li:first').find("input").attr('name');