檢查

2011-08-01 60 views
260

可能重複:
Is there an 「exists」 function for jQuery檢查

是的,我知道這已經被問了很多。 但是,它讓我困惑,因爲在谷歌的結果這個搜索顯示不同的方法(見下表)

$(document).ready(function() { 
    if ($('#DivID').length){ 
     alert('Found with Length'); 
    } 

    if ($('#DivID').length > 0) { 
     alert('Found with Length bigger then Zero'); 
    } 

    if ($('#DivID') != null) { 
     alert('Found with Not Null'); 
    } 
}); 

哪3中的一個是檢查是否存在股利的正確方法?

編輯: 看到人們不想從三種不同的方法中學習什麼是更好的方法是一件很難的事。這個問題實際上並不是「如何檢查div是否存在」,而是關於哪種方法更好,如果有人能夠解釋,爲什麼它更好?

+14

@miku - 它不是重複的,因爲這是爲了確定正確的方式,而不是如何。 – Dementic

+0

#Felix kling - jsfiddler上的所有3個作品http://jsfiddle.net/k6aAh/1/ – Dementic

+0

@Dementic,是的確 - 但它非常相似 - 如果最好的答案是錯誤的,我猜想其中一個73,694對的眼睛可能已經發現了一個錯誤。 – miku

回答

155

第一個是最簡潔的,我會去那。前兩個是相同的,但第一個是短一點,所以你會節省字節。第三個是明顯的錯誤,因爲該條件將始終評估爲真,因爲對於此事物體永不爲空或虛假。

+0

除非在上面的代碼中他們得到了像$('#DivID')= null;大聲笑) – Piero

+8

「第一個是最簡潔的,我會去那個{...},所以你會節省字節」,非常糟糕的心態。維護代碼>簡潔的代碼。 –

+1

@NiklasEkman - 我同意可維護性比精確的代碼更重要,但我沒有概括。我想我還不夠清楚。在測試集合的* length *的情況下,對於非零的正數,在我看來,'.length'失敗了'.length> 0',所以這是一種雙贏。不過,謝謝你指出這一點。 – karim79

8

由於karim79提到,第一個是最簡潔的。然而,我可以爭辯說第二個更容易理解,因爲某些Javascript/jQuery程序員不明顯/已知在if語句中將非零/假值評估爲true。正因爲如此,第三種方法是不正確的。

+1

我認爲大多數JavaScript開發人員會知道一個非零的正整數被認爲是「真理」,但這只是我的觀點:) – karim79

+2

我會爭辯說,所有Javascript開發人員**都應該知道這一點。但是現在很多人幾乎完全在「jQuery」中開發,缺乏基本的Javascript基礎。但是這是一個完全不同的討論:P – tskuzzy

+1

不同意。測試真實性是非常基本的JavaScript。如果你更熟悉另一種沒有這個概念的語言,它看起來很有趣,但它非常常見,一旦習慣了它,它會提高可讀性。 –

75

如果你只是檢查是否有ID的存在,就沒有必要進入jQuery的,你可以簡單地說:

if(document.getElementById("yourid") !== null) 
{ 
} 

getElementById回報null,如果它不能被發現。

Reference

然而,如果你打算使用jQuery的對象後來我建議:

$(document).ready(function() { 
    var $myDiv = $('#DivID'); 

    if ($myDiv.length){ 
     //you can now reuse $myDiv here, without having to select it again. 
    } 


}); 

一個選擇總是返回jQuery的對象,所以不應該有必要覈對null (如果您有需要檢查null的邊緣情況,我會很感興趣 - 但我認爲不存在)。

如果選擇器沒有找到任何東西,然後length === 0這是「falsy」(當轉換爲布爾錯誤)。因此,如果它發現了什麼,那麼它應該是「truthy」 - 所以你不需要檢查> 0.僅僅因爲它是「真實的」

+0

如果你想傷害你的頭,那麼在JS中的null對象上有一個有趣的問題http://stackoverflow.com/questions/801032/null-object-in-javascript –

+0

如果你使用jQuery,我沒有看到任何東西除非你確實需要提高性能(例如,它在一個很長的循環中,但是我想不出會出現這種情況,你需要反覆運行成千上萬的選擇查詢),所以使用'getElementById'的理由是, 。這只是更詳細,在很多JavaScript的過程中,真正增加了更多的空間和更少的可讀性。 –

+0

是的,我同意你的觀點@jamietre我主要使用jQuery版本,因爲我可能在其他地方使用jq對象。然而,如果你知道你總是要使用一個ID參數,並且你所做的一切都是檢查元素的存在,那麼讓jQuery對象幫助不大(因爲它只是包裝getElementById)。我想其他性能好處(如果檢查存在是jq的唯一需求 - 可能很少)甚至根本不需要下載庫。你的權利,getElementById大部分時間都是非常冗長的,但是很好的瞭解替代方案。 –