条件 jQuery 切换函数

Posted

技术标签:

【中文标题】条件 jQuery 切换函数【英文标题】:Conditional jQuery Toggle Function 【发布时间】:2014-02-11 17:13:01 【问题描述】:

我想根据属性类隐藏和显示列表项。

问题是某些列表项有多个类。因此,如果我切换一个类然后切换另一个类,则任何具有两个选定类的项目都将被删除。

我为我的问题创建了一个演示:http://jsfiddle.net/a4NkN/2/

这是 JS 代码:

$('#easy').click(function()
    $(this).toggleClass( "checked" );
    $('.easy').toggle();
);

$('#fun').click(function()
    $(this).toggleClass( "checked" );
    $('.fun').toggle();
);


$('#silly').click(function()
    $(this).toggleClass( "checked" );
    $('.silly').toggle();
);

如果您选择“简单”和“有趣”按钮,划船将消失。

我怎样才能让划船留下来?

【问题讨论】:

【参考方案1】:

这可能是一个很好的起点。尽管您可以这样做更便宜、更清洁,但这给出了这个想法:

使用一个数组来保存选择按钮的状态,并使用一个数组来保存类名。每当您的选择按钮被点击时,您将所有元素设置为不可见并再次重置那些可见的元素,这些元素已被其他按钮选择或当前单击,它们都保存在切换器数组中。

//saves whether button is active
var switcher = [false, false, false];
//holds your classes selectable
var classes = ['easy', 'fun', 'silly'];

$('.toggler').click(function () 
    // toogle the select button and save status
    var x = $(this).hasClass('checked');
    switcher[$(this).data('switch')] = !x;
    $(this).toggleClass("checked", !x);

    // iterate through your elements to set them active if needed 
    $('li').each(function () 
       var cur = $(this);
       cur.addClass('hidden');
       $.each(switcher, function (index, data) 
          if (data && cur.hasClass(classes[index])) 
             cur.removeClass('hidden');
          
      );
   );
);

这个小提琴的完整解决方案:http://jsfiddle.net/BMT4x/

【讨论】:

使用您的解决方案的功能,是否有一种方法可以创建一个“全选”按钮,当单击该按钮时,将根据选择的内容显示所有数据或隐藏数据?跨度> 这是一个全选按钮的外观示例,但是 $(".select_all").click 会中断 $(".toggler").click: jsfiddle.net/BMT4x/1 我为我的“全部切换”困境创建了一个新问题。***.com/questions/21320946/…【参考方案2】:

如果一个元素可以同时满足多个过滤器,则您不能基于单击其中一个按钮过滤器来无条件地切换元素。正确的方法涉及更多一点。

由于您的checked 类意味着只应显示与该按钮对应的项目,因此请执行以下操作:根据按钮的当前状态切换它们。当且仅当相应的按钮是checked 作为单击它的结果时,才会显示这些项目。

$('#easy').click(function()
    $(this).toggleClass( "checked" );
    $('.easy').toggle($(this).is(".checked"));
);

此代码使用.toggle 的最新版本,接受布尔参数。

也可以做得更简洁:

$('.easy').toggle($(this).toggleClass( "checked" ).is(".checked"));

【讨论】:

我实际上需要相反:当一个按钮被“选中”时,具有相应类的行项目应该是可见的。我更新了 JSFiddle:jsfiddle.net/a4NkN/4 ...谢谢... @user2888697:我更新了答案以反映这一点,这只是反转条件的问题。

以上是关于条件 jQuery 切换函数的主要内容,如果未能解决你的问题,请参考以下文章

clickToggle 或切换jquery函数[重复]

jQuery合并函数中的if条件令人困惑

jQuery的切换函数(hover,toggle)

jquery toggle()方法 语法

从零开始学_JavaScript_系列——jquery(基础,选择器,触发条件,动画,回调函数)

如何覆盖 jQuery 函数或阻止它执行