我想知道如何以最好的方式看到容器div是否包含子元素。我有一個點擊事件,觸發div id = unread或div id = read的孩子。我想檢查這個孩子在哪裏。
像這樣的事情是我在想什麼:
if ($("#unread").find($(this)))
alert("unread");
else
alert("read");
編輯: $(這)是一個後裔#unread或#閱讀兩個層次。
問候
我想知道如何以最好的方式看到容器div是否包含子元素。我有一個點擊事件,觸發div id = unread或div id = read的孩子。我想檢查這個孩子在哪裏。
像這樣的事情是我在想什麼:
if ($("#unread").find($(this)))
alert("unread");
else
alert("read");
編輯: $(這)是一個後裔#unread或#閱讀兩個層次。
問候
利用:.children()
if($("#unread").children().length > 0)
alert("unread");
else
alert("read");
編輯
if($(event.target).closest('#unread').length > 0)
alert('unread');
else
alert('read');
哦,我忘了說$(this)是來自#unread或#read的後代兩個級別。所以父母的父母應該是未讀或讀取 – user822448
這是行不通的,因爲點擊的$(this)是#unread的兩個級別。這也不是#unread的兩個單獨的孩子。 – user822448
我認爲只是增加.length
應該工作:
if ($("#unread").find($(this)).length > 0)
alert("unread");
else
alert("read");
有多個孩子看起來像$(this),這是#unread或#read的兩個級別。因此,我想,孩子們不會識別$(this)。 – user822448
這並不回答這個問題:OP詢問如何檢查一個div是否是另一個div的(大)孩子,而不是檢查一個div是否有任何孩子。 – nnnnnn
@ nnn-是,**現在**它說 –
轉到backwa從$(this)
RDS尋找#unread
作爲使用closest
祖先:
if($(this).closest('#unread').length > 0)
alert('unread');
else
alert('read');
根據您的HTML結構,這將是比搜索的#unread
所有的孩子找到this
更快。雖然速度差異可能並不重要,但您應該意識到倒退的選擇以及這樣做的可能的好處。
檢查祖先可能是一個更好的匹配你的意圖:你有this
在手,你真正想知道的是「它在#unread
?」。使用closest
返回DOM樹完全符合你所問的問題。
如果由於某種原因,你就開始在#unread
並查看其後代就死定了一套,那麼你可以使用find
:如果你使用
if($('#unread').find(this))
alert('unread');
else
alert('read');
但是這種做法只會工作至少jQuery的1.6。
我們走吧!這適用於此目的。謝謝! – user822448
使用.closest()
或.parents()
搜索了從點擊的元素樹:
if ($(this).closest("#unread").length == 1)
// etc
否則,你有興趣在非jQuery的回答呢?鑑於你所說的與click事件股利恰好是兩個級別低於「讀」或「未讀」的div你可能只是這樣做:
if (this.parentNode.parentNode.id === "unread")
alert("unread");
else
alert("read");
// or just alert(this.parentNode.parentNode.id);
我不知道我的最佳途徑可以看到如果一個容器div包含一個子元素。
使用$.contains()
,特別是如果性能是一個問題。從文檔:
jQuery。包含(容器,載)
返回:布爾
說明:檢查,看是否有DOM元素是另一個DOM元素的後代。
它比.find()
,.children()
,或.closest()
更高效,正如其他人推薦。但請注意,它只接受DOM元素作爲參數,而不接受jQuery對象(這是其性能更好的一部分)。
在你的情況,你可以在你的單擊事件處理程序做到這一點:
if ($.contains($("#unread")[0], this)) {
alert("unread");
} else {
alert("read");
}
編輯:在反覆思考這件事,它可能更直觀的從點擊的元素向上搜索,而不是下降來自父元素,並且性能通常不會成爲點擊事件處理程序中的關注點。也就是說,我會選擇使用.closest()
方法(如@nnnnnn建議和@mu太短),所以我的單擊事件處理程序將包含:
if ($(this).closest("#unread").length > 0) {
alert("unread");
} else {
alert("read");
}
的可能重複http://stackoverflow.com/問題/ 648004 /什麼是最快的孩子或找到在jquery – Vivek