jquery:基于类名的变量隐藏/显示

jquery:基于类名的变量隐藏/显示,jquery,class,filter,show-hide,Jquery,Class,Filter,Show Hide,我对jQuery非常陌生,需要一些过滤类的帮助。用户可以从九个按钮中选择要显示/隐藏的事件类型。单击一种颜色,仅显示具有该颜色的事件,其余的事件将隐藏。单击“全部”,显示所有事件,但不隐藏任何事件。所有事件都以显示:block开始 控制按钮示例: <li class="all" id="all-events"><a href="#" onclick="showEvents('event-all')"> <img src="swatch-all.png" alt=""

我对jQuery非常陌生,需要一些过滤类的帮助。用户可以从九个按钮中选择要显示/隐藏的事件类型。单击一种颜色,仅显示具有该颜色的事件,其余的事件将隐藏。单击“全部”,显示所有事件,但不隐藏任何事件。所有事件都以
显示:block
开始

控制按钮示例:

<li class="all" id="all-events"><a href="#" onclick="showEvents('event-all')">
<img src="swatch-all.png" alt="" /></a></li>

<li class="red" id="red-events"><a href="#" onclick="showEvents('event-red')">
<img src="swatch-red.png" alt="" /></a></li>

<li class="blue" id="blue-events"><a href="#" onclick="showEvents('event-blue')">
<img src="swatch-blue.png" alt="" /></a></li>
另一次没有任何效果的尝试是

function showEvents(color){
    $("p[className*='event-']").css('display', 'none');
    $("p[className=color]").css('display', 'block');
    if ($("p[className='event-all']")) 
        $("p[className*='event-']").css('display', 'block');
}

任何帮助都将不胜感激

您的思路是正确的,但您似乎将“全部事件”传递给了
showEvents
,而不仅仅是“全部”

function showEvents(color){
 if(color=='event-all'){
   $('p').css('display','block');
 }else{
   $('p').css('display','none');
   $('p.'+color.replace('event-','')).css('display','block');
 }
}
因此,如果您将
onclick
代码更改为
showEvents('all')、showEvents('blue')
,等等。。。它应该会起作用

然而,我会以不同的方式来处理这个问题。首先,使用jQuery分配onclick处理程序要容易得多,通过查看
  • 上的类而不是将其传入,可以找到该处理程序中单击的颜色

    // The is the same as onclick=.... but for ALL <a> elements within an <li>
    $("li > a").click(function () {
    
       // Find the color that was clicked
       var color = $(this).parent().attr("class");
    
       // "All" is a special case
       if (color == "all") {
          // Show all <p>s in div with ID "bigCal"
          $("#bigCal p").show();
       } else {
          // Hide all <p>s in div with ID "bigCal"
          $("#bigCal p").hide();
    
          // Show the <p> with the same class
          $("#bigCal p." + color).show();
       }
    
    });
    
    //与onclick=..相同。。。。但对于
  • $(“li>a”)。单击(函数(){ //查找单击的颜色 var color=$(this.parent().attr(“类”); //“全部”是一个特例 如果(颜色=“全部”){ //在ID为“bigCal”的div中显示所有s $(“#bigCal p”).show(); }否则{ //用ID“bigCal”隐藏div中的所有s $(“#bigCal p”).hide(); //显示同一类的 $(#bigCal p.“+color).show(); } });
  • 如果我正确理解你的问题,我认为这应该是解决办法。
    FJ

    下面是一个如何执行此操作的示例

    我不使用图像,但你会明白的。请注意,我不是通过使用“onclick”事件来分配javascript。如果您通过jQuery进行操作,则会更干净

    希望这能让你开始


    鲍勃这是我给你的解决方案。我更改了onclick调用以反映类的实际名称

    Javascript

    function showEvents(color) {
             if(color!='all')
             {
                jQuery('#bigCal > p').hide();
                jQuery('.'+color).show();
             }
             else{jQuery('#bigCal > p').show();}
          }
    
    HTML

    <ul>
          <li class="all" id="all-events">
            <a href="#" onclick="showEvents('all')">Show All</a>
          </li>
          <li class="red" id="red-events">
            <a href="#" onclick="showEvents('red')">Show Red</a>
          </li>
          <li class="blue" id="blue-events">
            <a href="#" onclick="showEvents('blue')">Show Blue</a>
          </li>
        </ul>
       <div id="bigCal">
          <p class="all"><a href="http://foo.com" title="All event">All events</a></p>
          <p class="blue"><a href="http://bar.com" title="Blue event">Blue event</a></p>
          <p class="red"><a href="http://foobar.com" title="Red event">Red event</a></p>
       </div>
    


    也就是说,在学习jQuery时,我发现可视化jQuery非常宝贵:

    非常好!通过将“all”类添加到每种颜色(class=“all red”),可以轻松显示所有颜色。这让我完全困惑不解——如何轻松获得所有其他课程。谢谢再加上了解jsfiddle.net。多酷啊!通过jQuery获取onclick的代码也非常有用。谢谢你帮我测试。这一切都很不同,而且在我的网站上实现起来很容易。使用jQuery查找单击的按钮是对的。它干净多了谢谢这是我第一次在这个论坛上提出问题,我真的对快速得到的有用的回答印象深刻!谢谢大家!感谢您告诉我有关Visual jQuery的信息^_^
    // The is the same as onclick=.... but for ALL <a> elements within an <li>
    $("li > a").click(function () {
    
       // Find the color that was clicked
       var color = $(this).parent().attr("class");
    
       // "All" is a special case
       if (color == "all") {
          // Show all <p>s in div with ID "bigCal"
          $("#bigCal p").show();
       } else {
          // Hide all <p>s in div with ID "bigCal"
          $("#bigCal p").hide();
    
          // Show the <p> with the same class
          $("#bigCal p." + color).show();
       }
    
    });
    
    function showEvents(color){
        $(p["class^='event-'"]).each(function() {
           if(!this.hasClass(color))this.hide();//or .css(display:none;)
           else {this.show()};
    })
    
    function showEvents(color) {
             if(color!='all')
             {
                jQuery('#bigCal > p').hide();
                jQuery('.'+color).show();
             }
             else{jQuery('#bigCal > p').show();}
          }
    
    <ul>
          <li class="all" id="all-events">
            <a href="#" onclick="showEvents('all')">Show All</a>
          </li>
          <li class="red" id="red-events">
            <a href="#" onclick="showEvents('red')">Show Red</a>
          </li>
          <li class="blue" id="blue-events">
            <a href="#" onclick="showEvents('blue')">Show Blue</a>
          </li>
        </ul>
       <div id="bigCal">
          <p class="all"><a href="http://foo.com" title="All event">All events</a></p>
          <p class="blue"><a href="http://bar.com" title="Blue event">Blue event</a></p>
          <p class="red"><a href="http://foobar.com" title="Red event">Red event</a></p>
       </div>