2012-11-01 271 views
10

我在堆棧溢出中發現了很多相關的東西,但不適用於我的情況。檢查元素是否包含jQuery中的另一個元素

這一切都在這個例子中,我需要檢查一個元素是否包含另一個元素,如果是,請追加一些東西。

$(".bt_repondre").click(function(){ 
    comment = $(this).parent().parent().parent(); 
    //I want to check if comment containa a .comment_full element, if no, append. 
    comment.append('add'); 
}); 

希望你能幫助我,我試過很多東西...

回答

12

只需使用.find()並檢查是否返回元素,像這樣:

$(".bt_repondre").click(function(){ 
    comment = $(this).parent().parent().parent(); 
    if (! comment.find('.comment_full').length) { 
     comment.append('add'); 
    } 
}); 
+1

@ Jean-François你真的應該看看Blender的回答!它比這個簡潔一點 – ksoo

+0

PS:不要使用'.parent()。parent()。parent()'。使用'.closest(「)。someSelector「) –

23

您可以使用.has.length

if (comment.has('.comment_full').length) { 
    // It has that element 
} 
  • .find將迭代所有後代,但.has將在找到匹配選擇器的後代後停止。它可能運行得更快。

  • .length只是檢查結果集合的元素的長度是否非零。

0

試試這個

comment.has('a.comment_full').length == 0 
+1

這不會告訴你它是否包含其他元素? – ksoo

1

大多數這些答案都是偉大的,但有一個new method called contains(container,contained)(在1.4加)返回一個Boolean!它與Blender的代碼片段基本相同,但可能更快,無論是鍵入還是執行。

在你的代碼中實現,它會是這樣的:

$(".bt_repondre").click(function(){ 
    comment = $(this).parent().parent().parent(); 
    if(!$.contains(comment, $('.comment_full')))//same as if(!jQuery.contains(... 
    { 
     comment.append('add'); 
    } 
}); 
7

大多數的答案是不正確的。您需要必須通過一個DOM節點而不是一個jQuery元素$ .contains正常工作,每https://api.jquery.com/jQuery.contains/

例如,您將如何確定$('#a')是否包含$('#b)

HTML:

<div id="a"> 
    <div id="b"></div> 
</div> 

的JavaScript:

var $a = $('#a'); 
var $b = $('#b'); 
var contains = $.contains($a.get(0), $b.get(0)); 
console.log('contains', contains); 
// outputs `true` 
1

如果你正在尋找讓我們假設表裏面的任何tr元素與myTable的的ID,您可以使用下面的代碼:

if($('#productsTableBody tr').length) 
{ 
//... 
} 

這樣我們可以檢查wheather表是否包含任何行。

相關問題