0

我有一些包含部分视图的 div。为什么对不存在的 div 的引用不会显示某种错误?例如,我现在只有一个 taskN div:

<div id="task1">
    @Html.Partial("~/Views/PartialViews/TaskDosCommand.cshtml")
</div>

这是我显示 div 的 jQuery:

$('#task' + task.PrestoTaskType).show();

task.PrestoTaskType为 1 时,task1 div 正确显示。但是,当task.PrestoTaskType不是 1 时,比如 2,则什么都不显示(这很好),但没有错误;网页上没有显示任何错误,Chrome 开发者工具控制台中也没有显示任何内容:

在此处输入图像描述

访问不存在的 DOM 元素时不应该显示某种错误吗?

4

3 回答 3

3

jQuery 的优点之一是所有 jQuery 元素都返回一个集合,无论是 0 个、1 个还是多个元素。这很方便,因为当你想调用它的方法时,你不需要检查集合的大小或将它自己包装在一个数组中(each例如,对于 0-1 个元素不会中断)。

虽然您所说的在这种特殊情况下令人沮丧,但 jQuery 最好以这种方式工作,这样您就不必在其他任何地方进行这些检查。

于 2013-10-06T14:45:36.623 回答
3

不,因为 jQuery 所做的是.show() jQuery 对象包装的所有元素。如果那根本不是元素,那就这样吧。

这正是 jQuery 的一个类似 monad 的方面,使它如此有用:想象一下,如果事情不是这样,你必须编写的代码:

var $whatever = $(...);
if ($whatever.length) $.doSomething();

这更糟糕:您需要引入一个变量(为了避免浪费)一个条件......以获得什么收益?

如果您查看 jQuery 匹配的内容,您可以使用.length上面的方法很容易地做到这一点,也许也可以.filter在此过程中使用。

于 2013-10-06T14:42:11.820 回答
2

如果你想基于这样一个元素的存在来分支代码,你可以这样做:

var task = $('#task' + task.PrestoTaskType);

if (task[0]) {
    task.show();
} else {
    // task not found
    // take appropriate steps
}

访问器[0]将返回 jQuery 对象中的第一个 DOM 元素,或者undefined如果 jQuery 对象为空。由于您的 jQuery 对象是使用 ID 选择器构造的,因此它要么只包含一个 DOM 元素,要么为空。

于 2013-10-06T14:45:59.340 回答