![](/img/trans.png)
[英]Can anyone explain the strange Object behavior of getBoundingClientRect()?
[英]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.