繁体   English   中英

为什么访问不存在的DOM元素时没有错误?

[英]Why no error when accessing a DOM element that doesn't exist?

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

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

这是我的jQuery,显示div:

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

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

在此处输入图片说明

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

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

这恰好就是jQuery类似于monad的一个方面,它是如此有用:设想一下,如果事情不能以这种方式工作,那么您必须编写代码:

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

这简直更糟:您需要引入一个变量(以避免浪费) 一个有条件的...究竟能获得什么收益?

如果您查看与jQuery匹配的内容,可以使用.length轻松地完成上述操作,也可以在此过程中使用.filter

jQuery的优点之一是所有jQuery元素都返回一个集合,无论该集合是0、1还是许多元素。 这很方便,因为您不需要在需要调用集合的方法时检查集合的大小或将其包装在数组中(例如, each元素都不会破坏0-1个元素)。

尽管在这种情况下您正在谈论的内容令人沮丧,但jQuery最好采用这种方式工作,因此您不必在其他地方进行此类检查。

如果要基于此类元素的存在来分支代码,则可以执行以下操作:

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM