请解释.toggleClass()API中的'switch'?

时间:2012-07-24 06:18:33

标签: jquery

Here是Jquery库的.toggleClass()方法的API。我不确定如何实现开关部分。开关部分是否应该导致布尔值,如果是,那么它是否实现?

所以如果代码是:

`$('selector').toggleClass('class-to-be-toggled' , ($(this).hasClass('white')))`

并且($(this).hasClass('white'))评估为true,然后.toggleClass()将执行,如果评估为false,那么.toggleClass()将无法执行?

或者我误解了switch的目的。

4 个答案:

答案 0 :(得分:3)

switch boolean确定是添加还是删除类。如果switch参数为true,则将添加该类,如果为false,则将删除该类。

直接来自jQuery doc:

.toggleClass( className, switch )  

className - One or more class names (separated by spaces) 
    to be toggled for each element in the matched set. 
switch - A Boolean (not just truthy/falsy) value to determine 
    whether the class should be added or removed.

jQuery doc page上甚至还有一个代码示例,显示了switch参数的使用。

如果根本没有传递开关布尔值,那么该类将被添加(如果尚未存在)并且如果它存在则被移除(因此它将被切换)。

答案 1 :(得分:3)

如果省略该参数,将根据当前不存在的内容添加或删除该类。如果传递参数,则无论元素的当前状态如何,都将根据参数添加或删除类。

例如,这个:

$(':checkbox').click(function() {
    $(this).parent().toggleClass('selected', $(this).is(':checked'));
});

几乎只是写作的简写:

$(':checkbox').click(function() {
    if($(this).is(':checked')) {
        $(this).parent().addClass('selected');
    } else {
        $(this).parent().removeClass('selected');
    }
});

你可能会反对大多数时候你只是

$(':checkbox').click(function() {
    $(this).parent().toggleClass('selected');
});

可能就是这种情况,但如果有任何 else 而不是检查复选框可能会干扰selected类,那么您的切换将面临失去同步的风险,如果你没有传递一个参数,准确指出你想要它做什么。

答案 2 :(得分:0)

如果您的第二个参数(开关)为true,则添加该类(如果为false则添加该类

答案 3 :(得分:0)

.toggleClass()的第二个参数是三态参数。

  • $x.toggleClass('c', true)添加c
  • $x.toggleClass('c', false)删除c
  • $x.toggleClass('c')反转是否存在c(如果存在则添加$x.toggleClass('class', undefined)

    typeof switch == 'boolean'也会反转

第四个备选方案未在.toggleClass()中进行记录,但是guaranteed可以使用,因为that's how optional function parameters work

jQuery源代码中的区别似乎是Boolean(0)。 顺便将falsenull一样对待,这样也将删除该类。 除了省略switch参数之外, 看来您可以通过42undefined来执行一些反向切换动作。 但是当然,您不应该在undocumented功能上进行编码。 如果您要明确切换,我建议传递BEGIN IF NOT EXISTS (SELECT * FROM innehall WHERE Produkter = 'kyckling' AND typ = 'Sallader') BEGIN INSERT INTO innehall (Produkter, typ) VALUES ('kyckling', 'Sallader') END END;