2014-09-30 2 views
0

У меня есть следующий 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 «s первый Детский NAME Атрибут

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

Это кажется откидывать undefined

+0

вы можете напечатать task_count? – IshaS

ответ

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") 
0

То, как вы пытаетесь сделать dom manipulation неправильно. Фактически вы нацеливаете элемент li в свой код, но необходимо захватить элемент input, присутствующий внутри этого li. Поэтому вы должны использовать .find() для поиска потомков внутри этого li.

Try,

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

попробуйте следующее: Вы пытаетесь получить name атрибут li, вместо того, чтобы найти input внутри li, а затем получить его атрибут name

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

Try:

var task_name = $(this).parents("li:first").find("input[name]:first").attr('name'); 
Смежные вопросы