在重构这段代码之前,先进行一下现实检查。据我所知,它来自于其他方面有能力的人。这是一个示例:
// remove line at the latest list
if($(".extra-space").length > 0) {
$(".extra-space li:last").addClass("noborder");
}
// select all
if($(".extra-select-all").length > 0) {
$(".extra-select-all").click(function() {
if($(this).attr("checked") == true) $(".extra-select-item").attr("checked","checked");
else $(".extra-select-item").removeAttr("checked");
});
}
有谁知道这种模式背后的基本原理,还是只是因为不知道 if
包装器是不必要的?
// remove line at the latest list
$(".extra-space li:last").addClass("noborder");
// select all
$(".extra-select-all").click(function() {
if($(this).attr("checked") == true) $(".extra-select-item").attr("checked","checked");
else $(".extra-select-item").removeAttr("checked");
});
最佳答案
从编程角度来说,这是有道理的,因为这些元素不可能存在,并且返回的数组的长度可能为 0
,但由于 jQuery 是为设计人员和非程序员服务的,因此它会自动处理对非程序员的调用。 - 现有元素,这意味着您实际上并不需要这些检查,因为 jQuery 是尽可能防伪的。
$('microsoft').addClass('sucks')
完全有效,因为返回的 jquery obj 有一个继承的 addClass
方法,并且无论是否执行该方法都会执行或者不存在一个元素。
注意:我只谈论纯 jQuery 方法。如果执行的方法是自定义插件,甚至是另一个答案中指定的 UI 插件,则行为可能与核心不同,在这种情况下,检查 .length
就我个人而言,我总是会检查.length
,因为这意味着如果稍后进行重构,则可以减少歧义和猜测工作,并且如果神秘的错误开始出现,我的错误检查将节省时间调试期间。
关于jquery - 这些 jQuery 元素测试完全没有必要吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5147828/