2017-03-09 81 views
-3

我需要檢查某個dom元素是否存在。我看到其他帖子建議length屬性來檢查。這工作正常。但它甚至沒有length屬性。例如:

!!$("#myElement");  // true 
!!$("#myElement").length; // true 

兩種方式返回相同的值。那麼可以不使用length屬性來檢查元素是否存在?

+1

您是否考慮過使用您知道不存在的元素進行測試(即長度爲0)?結果可能會讓你大吃一驚。 – BoltClock

+0

在大多數代碼中,我會看到if($(「#myElement」).length){},因爲如果沒有長度,那麼它將評估爲false,如果有長度,則評估爲true。 – Neil

+0

由於不在意元素是否存在,因此您使用'$(「#myElement」)'獲得誤判。 jQuery將總是返回一個帶有任何匹配元素的jQuery對象,因此總是檢查'.length'來查看裏面是否有實際的元素。請隨時查看►[** https://learn.jquery.com/using-jquery-core/jquery-object/**](https://learn.jquery.com/using-jquery-core/jquery-object /) – Nope

回答

0

不,總是使用length

您的邏輯存在缺陷,因爲jQuery對象從不爲空或爲null,即使沒有選中元素,它也會返回一個對象,因此您無法可靠地將其強制轉換爲布爾值,以查看選擇器是否匹配任何元素。

console.log(!!$('#exists')); // should be true 
 
console.log(!!$('#doesNotExist')); // should be false
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div id="exists"></div>

正如你可以在上面看到,這兩個測試返回true

+0

你是對的'!! []'返回true。我可以使用'!! $(「#myElement」)[0]'? – user31782

+0

你可以,但不要。 '長度'屬性是公認的標準。 –

+0

我很好奇爲什麼'!! []'返回true?不是一個空陣列應該是假的? – user31782