0

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

4

6 回答 6

2

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

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

还有,美元中的美元是什么意思?它是这样设置的:$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);
}
于 2013-07-15T13:20:36.010 回答
2

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

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

Codecademy有一个很好的三元教程。

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

于 2013-07-15T13:20:46.333 回答
1

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

$el = (element);目的只是避免一直做$(element),不仅打字时间更长,而且document.getElementById()每次都在幕后调用。程序员只是抓取一次对该对象的引用。这与您编写的原因相同:

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

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

于 2013-07-15T13:20:35.757 回答
1

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

当您设置复选框的选中属性时,它应该使用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) );
于 2013-07-15T13:20:55.850 回答
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()

于 2013-07-15T13:22:12.827 回答
1

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

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

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

callback && callback(args);

仅在callback定义时运行;

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

于 2013-07-15T13:22:22.700 回答