2012-11-01 235 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表是否包含任何行。

相关问题