奇怪的jQuery格式,谁能解释一下?

时间:2013-07-15 13:11:16

标签: javascript jquery dollar-sign

我遇到了一个切换复选框的插件(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)。我理解为什么它需要在右边,但不知道它在左边的位置。

6 个答案:

答案 0 :(得分:2)

  

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

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

  

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

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

这条线基本上是使用ternary运算符

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

但也可以这样写:

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

答案 1 :(得分:2)

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

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

Codecademy有一个关于三元的好教程。

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

答案 2 :(得分:1)

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

$el = (element);的傀儡只是为了避免一直做$(element),这不仅要输入更长时间,而且每次都在幕后调用document.getElementById()。程序员突然抓住对象的引用一次。这与你写的原因相同:

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

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

答案 3 :(得分:1)

关于代码有很多解释,但是你要解决的问题是jQuery 1.6之后attr()使用的事实已经改变了。

当您设置复选框的已选中属性时,它应该使用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) );

答案 4 :(得分:1)

这只是一个三元运算符... 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()

答案 5 :(得分:1)

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

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

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

callback && callback(args);

仅在定义callback时运行;

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