代码之家  ›  专栏  ›  技术社区  ›  Jonny Haynes

当我只想更改一个元素时,如何阻止jQuery影响所有元素

  •  0
  • Jonny Haynes  · 技术社区  · 16 年前

    好的,我有一份清单 <li> 在like so中有一些内容:

    <div>
        <ul>
            <li><h4>...</h4><div>...</div></li>
            <li><h4>...</h4><div>...</div></li>
            <li><h4>...</h4><div>...</div></li>
            <li><h4>...</h4><div>...</div></li>
            <li><h4>...</h4><div>...</div></li>
            <li><h4>...</h4><div>...</div></li>
            <li><h4>...</h4><div>...</div></li>
        </ul>
    </div>
    

    <div> <h4> s是“单击”的 <部门> 使其可见,再次单击时将使其不可见。

    除了单击 <h4> 无论如何 < 所有的 <部门>

    我如何阻止这种情况发生?我只想要 <部门> <李> 那 <h4> 单击以使其可见。

    这是我的jQuery:

    $(document).ready(function() {
        $('div div').hide();
        $('div h4').click(function(){
            if($('div div').is(':hidden')) {
                $('div div').show();
                $('div li').addClass('open');
                }
            else {
                    $('div div').hide();
                    $('div li').removeClass('open');
                }
            });
        });
    
    7 回复  |  直到 16 年前
        1
  •  4
  •   Andre Haverdings    16 年前

    您还可以使用“兄弟姐妹”选择器

    $(document).ready(function() {
        $('div div').hide();
        $('div h4').click(function(){
            $(this.parentNode).toggleClass('open');
            $(this).siblings('div').toggle();
        });
    });
    
        2
  •  1
  •   Sheff    16 年前
    $(document).ready(function() {
            $('div div').hide();
            $('div h4').click(function(){
    
                    if($(this).parents('div').is(':hidden')) {
                            $(this).find('div').show();
                            $(this).addClass('open');
                            }
                    else {
                                    $(this).parents('div').hide();
                                    $(this).removeClass('open');
                            }
                    });
            });
    
        3
  •  1
  •   TeKapa    16 年前

    $(document).ready(function() {
                $('div div').hide();
                $('div h4').click(function(){ 
                        var $li=$(this).closest('li');
                        var $innerDiv=$li.find('div')
    
                        if($innerDiv.is(':hidden')) {
                                $innerDiv.show();
                                $li.addClass('open');
                                }
                        else {
                                        $innerDiv.hide();
                                        $li.removeClass('open');
                                }
                        });
                });
    
        4
  •  0
  •   ndim    16 年前

    单击处理程序函数正在使用普通 $('foo') 正在浏览全局文档。我敢打赌,这个解决方案涉及到一些 this h4 元素,而不是“文档中的所有内容”。

        5
  •  0
  •   tschaible    16 年前

    选择 $('div div') 您正在选择属于其他div的所有div。这适用于您的初始隐藏,因为您正在隐藏所有div,但在if语句中,您可能需要更像 $(this).next()

        6
  •  0
  •   David Murdoch    16 年前

    $(this.parentNode).toggleClass("open").children("div").toggle();
    
        7
  •  0
  •   Mad    11 年前

    我建议.sibles().first()只影响jQuery查找的第一个同级。