使用 jQuery 的水印插件,我尝试 jslint 并最小化函数,但我遇到了以前从未见过的语法,其中存在确实应该有赋值或函数调用的表达式:
(function($) {
$.fn.watermark = function(css, text) {
return this.each(function() {
var i = $(this), w;
i.focus(function() {
w && !(w=0) && i.removeClass(css).data('w',0).val('');
})
.blur(function() {
!i.val() && (w=1) && i.addClass(css).data('w',1).val(text);
})
.closest('form').submit(function() {
w && i.val('');
});
i.blur();
});
};
$.fn.removeWatermark = function() {
return this.each(function() {
$(this).data('w') && $(this).val('');
});
};
})(jQuery);
我对以下几行特别感兴趣:
w && !(w=0) && i.removeClass(css).data('w',0).val('');
and
!i.val() && (w=1) && i.addClass(css).data('w',1).val(text);
有人可以解释这个简写并重写这些函数,以便我可以比较它们以更好地理解简写吗?
谢谢。
让我们将您所询问的每个陈述分解为它们的组成部分:
w && !(w=0) && i.removeClass(css).data('w',0).val('');
-
w
- Is w
“真的”? (检查!= 0
在这种情况下)
-
!(w=0)
- Set w
to 0
,取结果的相反值,因此&&
链条继续
-
i.removeClass(css).data('w',0).val('')
- 删除类,将数据设置为0
清除该值。
!i.val() && (w=1) && i.addClass(css).data('w',1).val(text);
-
!i.val()
- 输入内容是否为空?
-
(w=1)
- Set w
to 1
-
i.addClass(css).data('w',1).val(text);
- 添加类,将数据设置为1
并将文本设置为水印文本。
这两者都只是声明really减少代码,当然会牺牲可读性。如果您正在查看缩小版本,那么这是很常见的,如果您not这是原版,用沙拉叉追作者,在我看来,原版应该比这个更具可读性,尽管对于缩小版来说就可以了。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)