【问题标题】:jQuery - If DIV class equals X, hide all other DIVs with a different classjQuery - 如果 DIV 类等于 X,则隐藏所有其他具有不同类的 DIV
【发布时间】:2026-02-18 16:20:03
【问题描述】:

我是 jQuery 新手,对 JS 还很陌生(有点知识),我想创建一个 jQuery 代码。

首先,这是我的 HTML 代码:

<div id="user-controls">
    <div class="choice" id="choice-all" onclick="showAll();">All</div>
    <div class="choice" id="choice-asus" onclick="justASUS();">ASUS</div>
    <div class="choice" id="choice-htc" onclick="justHTC();">HTC</div>
</div>

<div id="devices">
    <div class="android asus">Nexus 7</div>
    <div class="android htc">One S</div>
    <div class="android htc">One X+</div>
    <div class="android asus">Transformer Prime</div>
    <div class="winph htc">Windows Phone 8X</div>
</div>

我想要一个可以执行以下操作的 jQuery 代码:

  1. 如果我单击#choice-asus DIV,则所有具有 .htc 类的 DIV 都将设置为 display="none"

  2. 如果我单击#choice-htc DIV,则所有具有 .asus 类的 DIV 都将设置为 display="none"

  3. 如果我点击#choice-all DIV,那么所有DIV都将设置为display="inline-block"(这也是页面首次加载时的默认设置)

    李>

我已经尝试过下面的代码,但它什么也没做。

$(document).ready(function(){
    $("#choice-htc").click(function(){
        $(".htc").hide();
    })
});

感谢您的帮助, 迪伦。

【问题讨论】:

  • 带有“HTC” id 的元素在哪里(区分大小写)
  • 糟糕。对不起。这是从一个单独的测试文件中获取的,但它的作用与此代码中的#choice-htc 相同。
  • @AnandVeeramani 我现在已经修好了。我使用 HTC 来查看它是否会隐藏自己匹配的 DIV 元素,但它不起作用。如果是这样,我会在之后交换编码。

标签: javascript jquery css html


【解决方案1】:

这么多选择:) http://jsfiddle.net/9RtUE/

    $(function(){
        $("#user-controls").on('click','div',function(){
           var classToShow = this.id.split('-')[1],
               filter = classToShow === "all" ? 'div': '.' + classToShow;
           $("#devices").children().show().not(filter).hide();
         }); 
     });

【讨论】:

  • 嘿。 :) 谢谢你的快速反应。上面的代码与 jsFiddle 完美配合,但无法在我的网站上运行。我已经通过外部文件链接了最新版本的 jQuery,并且所有错误控制台都是空白的。我不确定发生了什么事。 dylricho.com/archive/learning/Dropdown_Styles/new4.php
  • 您似乎遇到了一些 jquery 问题。 '$' 在您的页面上未定义。也许您与其他包含的 javascript 存在某种冲突。
  • 我发现是这个代码 - dylricho.com/s/FluidTextResizer.js
  • 但是如果我注释掉jQuery.noConflict() 行并没有冲突,并且文本大小调整器仍然可以与您的代码一起工作。
  • 请参阅this link 了解有关您可以做什么的信息/建议。希望对您有所帮助。
【解决方案2】:

尝试使用 jquery

Demo

$('#choice-all').click(function(){
  $('.htc, .asus').show();
});

$('#choice-asus').click(function(){
  $('.asus').show();
  $('.htc').hide();
});

$('#choice-htc').click(function(){
  $('.htc').show();
  $('.asus').hide();
});   

【讨论】:

  • 您好,您的代码在 jsFiddle 上运行良好,但无法在我的网站上运行。我有从外部文件链接的最新 jQuery 库,所以我不确定问题是什么。你能帮忙吗? dylricho.com/archive/learning/Dropdown_Styles/new.php
  • 没关系。这似乎是另一个脚本之间的冲突问题。使用 '$' 不起作用,但使用 'jQuery' 起作用了。 :)
  • @DylRicho ,好的,你也可以使用jQuery.noConflict();
【解决方案3】:

Demo here

$(document).ready(function(){   
    $(".choice").click(function(){
         $(".android,.winph").hide();
        if($(this).attr("id")=="choice-all"){
            $(".android,.winph").show();
        }else if($(this).attr("id")=="choice-asus"){
            $(".asus").show();
        }else if($(this).attr("id")=="choice-htc"){
            $(".htc").show();
        }
    });
});

【讨论】:

    【解决方案4】:

    为了保持简单和清洁,您应该使用这样的解决方案

    $(function(){
        $('#choice-asus').on('click', function(){
            $('#devices > div:not(.asus)').hide();
        });
    });
    

    它基本上是说,如果你点击 #choice-asus,隐藏 #devices 中没有类 asus 的所有 div。

    您可以根据自己的需要扩展/修改它。 此外,它建议使用 jquerys .on() 方法而不是单击/绑定或您应用的任何处理程序。

    【讨论】:

    • 嘿斯特凡。您的代码似乎在 jsFiddle 上运行良好,但无法在我的网站上运行。我已经通过外部脚本链接了最新版本的 jQuery,Chrome 的错误控制台中没有显示任何内容。你有什么建议吗? dylricho.com/archive/learning/Dropdown_Styles/new3.php
    • 我想我找到了!似乎 $ 未定义,只需将我的 sn-p 中的 $ 更改为 jQuery,它应该可以工作
    • 我通过反复试验采用了一种新方法。你怎么看? :) dylricho.com/archive/learning/Dropdown_Styles/new-custom.php
    • 使用 css 或 hide() 方法并不重要,因为 hide() 方法也会更改 css,无论哪种方式,您的问题似乎都得到了解决!
    • 唯一的区别是 css() 方法似乎可以工作。谢谢帮助的小伙伴。 :)
    【解决方案5】:
    $(document).ready(function(){
        if($('div').attr('class')=='X')
        {
             $('div').not($(this)).css('display','none');
        }
    });
    

    【讨论】:

      【解决方案6】:

      你可以试试下面的代码-

      function showAll(){
          $("#devices div").show();
      }
      function justASUS(){
          $("#devices div").hide();
          $("#devices .asus").show();
      }
      function justHTC(){
          $("#devices div").hide();
          $("#devices .htc").show();    
      }
      

      演示here.

      【讨论】:

      • 嗨。感谢您的回复。该代码在 jsFiddle 中似乎可以正常工作,但在我的网站上不起作用。我通过外部脚本链接了最新版本的 jQuery,而 Google Chrome 的错误控制台是空白的。你能帮我吗? dylricho.com/archive/learning/Dropdown_Styles/new2.php
      • 哪个浏览器不工作。我已经检查了 chrome 并且工作正常。
      • 没关系。这似乎是另一个脚本之间的冲突问题。使用 '$' 无效,但使用 'jQuery' 有效。