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