2

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

所以如果代码是:

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

并且($(this).hasClass('white'))评估为真,然后.toggleClass()将执行,如果它评估为假,那么.toggleClass()将不执行?

还是我误解了switch.

4

4 回答 4

3

开关布尔值确定是添加还是删除类。如果 switch 参数为 true,则添加该类,如果为 false,则删除该类。

直接来自 jQuery 文档:

.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 页面上甚至还有一个代码示例,显示了 switch 参数的使用。

如果根本没有传递 switch 布尔值,则如果该类尚不存在,则将添加该类,如果存在则将其删除(因此它将被切换)。

于 2012-07-24T06:20:51.387 回答
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');
});

很可能是这种情况,但是如果除了检查复选框之外的任何其他操作可能会干扰selected课程,那么如果您不传递指定您想要的参数,那么您的切换将面临不同步的风险去做。

于 2012-07-24T06:24:49.793 回答
1

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

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

    $x.toggleClass('class', undefined)也反转

第四种选择没有记录在.toggleClass()中,但它保证可以工作,因为这就是可选函数参数的工作方式

jQuery 源代码中的区别似乎是typeof switch == 'boolean'. Boolean(0)顺便说一句,这也将false删除该课程。除了省略 switch 参数外,您似乎还可以通过null42获取一些反转切换操作。但当然,您不应该在未记录的功能上进行编码。undefined如果您想明确切换,我建议您通过。

于 2019-06-01T20:05:04.877 回答
0

如果您的第二个参数(开关)为真,则添加该类,如果为假则将其删除

于 2012-07-24T06:23:03.387 回答