奇怪的jQuery格式,任何人都能解释

Strange jQuery formatting, can anyone explain?

本文关键字:任何人 能解释 格式 jQuery      更新时间:2023-09-26

我遇到了一个切换复选框的插件(https://github.com/designmodo/Flat-UI/blob/master/js/flatui-checkbox.js)。

然而,它不能与最新版本的jQuery一起正常工作,所以我不得不对它进行调试

有人能解释一下吗?

if ($el.prop('disabled') == false) {
  $parent.toggleClass(ch) && checked ? $el.removeAttr(ch) : $el.attr(ch, true);
 $el.trigger(e).trigger('change'); 
}

具体来说,&&是怎么回事?我知道这是一个AND运算符,但我认为这些运算符只存在于if语句中。

此外,$el中的美元是什么意思?设置如下:$el = $(element)。我理解为什么它需要在右边,但不知道它在左边的作用是什么。

具体来说,与&?我知道这是一个AND运算符,但我认为这些运算符只存在于if语句中。

是的,它是一个AND操作数,javascript在使用表达式方面非常灵活和可原谅。

另外,美元el是什么意思?它是这样设置的:$el=$(元素)。我理解为什么它需要在右边,但不知道它在左边的作用是什么。

这只是为了表明使用jQuery检索的元素存储在$el变量中,这只是命名样式的问题,但不是必需的。

基本上,这条线使用的是三元算子

$parent.toggleClass(ch) && checked ? $el.removeAttr(ch) : $el.attr(ch, true

但也可以这样写:

if($parent.toggleClass(ch) && checked){
   $el.removeAttr(ch);
} else {
   $el.attr(ch, true);
}

&&是用三元运算符编写的。它基本上是一个简写的if(...){} else {}语句。它们写如下:

[if statement] ? [if true, return this] ? [else, return this]

Codecademy有一个关于燕鸥的好教程。

$el只是$(element)的变量名称。不一定需要$,该变量也可以很容易地命名为el。前导$有时包含在jQuery对象的变量名中,因为它模仿了前导$的jQuery语法。

这只是一个三元运算符。。。if条件的简写

 $parent.toggleClass(ch) && checked ? $el.removeAttr(ch) : $el.attr(ch, true);

这意味着

if($parent.toggleClass(ch) && checked){
    $el.removeAttr(ch);
} else {
   $el.attr(ch, true);
}

和大约$el。。

它只是一个变量名。我想创建了另一个变量,上面写着

var $el=$(element);

这个缓存jquery对象以获得更好的性能,并且不需要每次提到它时都调用getElementById()

在这种特殊情况下,&&用于编译布尔var并运行两个语句之一,它等于:

if ($parent.toggleClass(ch) && checked)
   $el.removeAttr(ch);
else 
   $el.attr(ch, true);

事实上,我不知道&&只允许在if运算符中使用的语言,但在JS中,你有更多的自由:你可以将其用作检查条件"是否需要我继续":

callback && callback(args);

将仅在定义了callback时运行;

最后,var名称中的$char只是提到这个var是jQuery包装的对象。没有必要。

关于代码有很多解释,但您试图解决的问题是attr()的使用在jQuery 1.6之后发生了变化。

设置复选框的checked属性时,应使用prop()而不是attr()。并且您不应该使用removeProp()进行检查,您需要使用$el.prop(ch, false);

$parent.toggleClass(ch) && checked ? $el.prop(ch, false); : $el.prop(ch, true);

或者可以写为

$el.prop(ch, !($parent.toggleClass(ch) && checked) );

?运算符左侧的表达式只是一个布尔表达式。&&可以用来构造任何布尔表达式,就像程序员在这里所做的那样。

$el = (element);的使用者只是为了避免一直做$(element),这不仅打字时间更长,而且每次都在幕后调用document.getElementById()。程序员正在突出地获取一次对对象的引用。这和你写的原因是一样的

var div = document.getElementById('somediv');

并在下面继续使用div。。。