的jQuery获取的Sibillings第一个孩子

问题描述:

的名称属性我有以下的HTML结构的jQuery获取的Sibillings第一个孩子

<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

可以打印task_count? – IshaS 2014-09-30 10:02:14

$(this).siblings('ul').children('li').attr("name") 

这将引发undefined作为li元素没有任何name属性

你需要做的部份: -

$(this).siblings('ul').children('li').find('input').attr("name") 

OR

$(this).siblings('ul').children('li').children('input').attr("name") 

,你正在试图做的dom manipulation是错误的方式。您的代码实际上是针对li元素,但要求是获取该li中存在的input元素。所以你应该使用.find()去搜索那个li里面的后代。

尝试,

var task_name = $(this).siblings('ul').children('li:first').find("input").attr('name'); 

试试这个:您正在尝试获得liname属性,而不是找inputli,然后获取其name属性

var task_name = $(this).siblings('ul').children('li:first').find('input').attr("name"); 

尝试:

var task_name = $(this).parents("li:first").find("input[name]:first").attr('name');