我需要檢查某個dom元素是否存在。我看到其他帖子建議length
屬性來檢查。這工作正常。但它甚至沒有length
屬性。例如:
!!$("#myElement"); // true
!!$("#myElement").length; // true
兩種方式返回相同的值。那麼可以不使用length
屬性來檢查元素是否存在?
我需要檢查某個dom元素是否存在。我看到其他帖子建議length
屬性來檢查。這工作正常。但它甚至沒有length
屬性。例如:
!!$("#myElement"); // true
!!$("#myElement").length; // true
兩種方式返回相同的值。那麼可以不使用length
屬性來檢查元素是否存在?
不,總是使用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)?結果可能會讓你大吃一驚。 – BoltClock
在大多數代碼中,我會看到if($(「#myElement」).length){},因爲如果沒有長度,那麼它將評估爲false,如果有長度,則評估爲true。 – Neil
由於不在意元素是否存在,因此您使用'$(「#myElement」)'獲得誤判。 jQuery將總是返回一個帶有任何匹配元素的jQuery對象,因此總是檢查'.length'來查看裏面是否有實際的元素。請隨時查看►[** https://learn.jquery.com/using-jquery-core/jquery-object/**](https://learn.jquery.com/using-jquery-core/jquery-object /) – Nope