我想知道如何以最佳方式查看容器div是否包含子元素。我有一个click事件,触发div id = unread或div id = read的子节点。我想查看这个孩子的位置。
这就是我在想的事情:
if ($("#unread").find($(this)))
alert("unread");
else
alert("read");
编辑: $(this)是来自#unread或#read。
的两个级别的后代此致
答案 0 :(得分:16)
利用:.children()
if( $("#unread").children().length > 0)
alert("unread");
else
alert("read");
修改
if($(event.target).closest('#unread').length > 0)
alert('unread');
else
alert('read');
答案 1 :(得分:2)
我认为只需添加.length
即可:
if ($("#unread").find($(this)).length > 0)
alert("unread");
else
alert("read");
答案 2 :(得分:2)
使用closest
从$(this)
向后搜索#unread
作为祖先:
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时才有效。
答案 3 :(得分:2)
使用.closest()
或.parents()
从点击的元素中搜索树:
if ($(this).closest("#unread").length == 1)
// etc
否则,您是否对非jQuery答案感兴趣?鉴于你已经说过点击事件的div正好比“read”或“unread”div低两级,你可以这样做:
if (this.parentNode.parentNode.id === "unread")
alert("unread");
else
alert("read");
// or just alert(this.parentNode.parentNode.id);