jQuery遍历父和子

时间:2009-10-26 15:24:37

标签: jquery

我有一个嵌套的未排序列表,我想在父复选框上放置一个click事件,所以在检查它时会检查所有子复选框,反之亦然。出于某种原因,我只能让选择器获得所有类型复选框的输入...我尝试了各种各样的方法,这是其中之一。有什么建议吗?

<ul id="parent">
<li>
   <input type='checkbox'>first</input>
   <ul>
      <li><input type='checkbox'>child1</input>
      </li>
      <li><input type='checkbox'>child2</input>
      </li>
   </ul>
</li>

<li>
   <input type='checkbox'>second</input>
   <ul>
      <li><input type='checkbox'>child1</input>
      </li>
      <li><input type='checkbox'>child2</input>
      </li>
   </ul>
</li>

</ul>

的jQuery

   $('#parent > li input[type=checkbox]').click(function() {

            var parent = $(this);

            if ($(parent).is(':checked')) {
                $('li > input[type=checkbox]', parent).each(function() {
                    $(this).attr('checked', true);
                });
            }
            else {
                $('li > input[type=checkbox]', parent).each(function() {
                    $(this).attr('checked', false);
                });
            }
        });

1 个答案:

答案 0 :(得分:6)

这应该有效:

首先回到LI,然后搜索复选框

$('#parent > li input[type=checkbox]').click(function() {

    $(this).closest("li").find("ul li input[type=checkbox]").attr('checked', $(this).is(':checked'))

});

但是您可以考虑添加一些类名。 所以你的代码变得更具可读性。

<li>
   <input type='checkbox' class='category'>first</input>
   <ul>
      <li><input type='checkbox' class='subcategory'>child1</input>
      </li>
      <li><input type='checkbox' class='subcategory'>child2</input>
      </li>
   </ul>
</li>

比你的jQuery看起来像这样:

$("#parent .category").click(function(){

    $(this).closest("li").find(".subcategory").attr('checked', $(this).is(':checked'))

});