簡體   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