繁体   English   中英

奇怪的jQuery格式,有人可以解释吗?

[英]Strange jQuery formatting, can anyone explain?

我遇到了一个用于切换复选框的插件( 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语句中。

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

具体来说,对&&的处理是什么? 我知道这是一个AND运算符,但我认为这些仅存在于if语句中。

是的,它是一个AND操作数,并且javascript在使用表达式方面非常有弹性可以原谅

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

这只是表明用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的前导$的语法。

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

$el = (element); 只是为了避免一直执行$(element) ,这不仅要花费更长的时间,而且每次都会在后台调用document.getElementById() 程序员只是一次抓取对该对象的引用。 这是您要编写的相同原因:

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

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

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

设置复选框的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) );

这只是三元运算符... 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包装的对象。 这不是必需的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM