jQuery获取Sibillings First Child的Name属性

时间:2014-09-30 09:52:50

标签: javascript jquery html

我有以下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

4 个答案:

答案 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');