我有一些div有部分观点。为什么对不存在的div的引用不会显示某种错误?例如,我现在只有一个taskN div:
<div id="task1">
@Html.Partial("~/Views/PartialViews/TaskDosCommand.cshtml")
</div>
这是我的jQuery来显示div:
$('#task' + task.PrestoTaskType).show();
当task.PrestoTaskType
为1时,task1 div会正确显示。但是,当task.PrestoTaskType
不是1时,如2,则没有任何显示(这是好的),但没有错误;网页上未显示任何错误,Chrome开发者工具控制台中未显示任何内容:
访问不存在的DOM元素时,是否应该显示某种错误?
答案 0 :(得分:3)
不,因为jQuery所做的是.show()
jQuery对象包装的所有元素。如果那根本就没有元素,那就这样吧。
这正是jQuery中与monad类似的一个方面,它使它如此有用:想象一下如果事情不能以这种方式工作你必须编写的代码:
var $whatever = $(...);
if ($whatever.length) $.doSomething();
这更糟糕的是:你需要引入一个变量(为了避免浪费)和一个有条件的......为了什么收益?
如果您希望查看jQuery匹配的内容,您可以使用上述.length
轻松完成此操作,也可以在此过程中使用.filter
。
答案 1 :(得分:3)
jQuery的一个好处是所有jQuery元素都返回一个集合,无论是0,1还是多个元素。这很方便,因为当你想调用它上面的方法时,你不需要检查集合的大小或自己将它包装在一个数组中(例如each
不会破坏0-1元素)。
虽然你所谈论的内容在这种特殊情况下令人沮丧,但jQuery最好以这种方式工作,这样你就不必在其他地方进行各种检查。
答案 2 :(得分:2)
如果你想根据这种元素的存在来分支代码,你可以这样做:
var task = $('#task' + task.PrestoTaskType);
if (task[0]) {
task.show();
} else {
// task not found
// take appropriate steps
}
如果jQuery对象为空,[0]
访问器将返回jQuery对象中的第一个DOM元素或undefined
。由于您的jQuery对象是使用ID选择器构造的,因此它只包含一个DOM元素,或者它是空的。