2012-11-01 7 views
10

Ich fand viele verwandte Dinge auf Stack Overflow, aber nicht für meinen Fall.Überprüfen, ob Element ein anderes in jQuery enthält

Es ist alles in diesem Beispiel, ich muss prüfen, ob ein Element ein anderes enthält, und wenn ja, etwas anhängen.

$(".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'); 
}); 

Hoffe ihr könnt mir helfen, ich so viele Dinge ausprobiert ...

Antwort

12

Nur .find() verwenden und wenn kehrt ein Element überprüfen, wie folgt aus:

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

@ Jean-François Sie sollten sich wirklich Blenders Antwort ansehen! Es ist ein wenig prägnanter als dieser – ksoo

+0

PS: Verwenden Sie nicht. .parent(). Parent(). Parent() '. Verwenden Sie '.closes (".someSelector ")' –

23

Sie .has verwenden können, und .length:

if (comment.has('.comment_full').length) { 
    // It has that element 
} 
  • .find iteriert über alle Nachkommen, aber .has stoppt, sobald ein Nachfolger gefunden wurde, der mit dem Selektor übereinstimmt. Es könnte schneller laufen.

  • .length prüft nur, ob die Länge der resultierenden Menge von Elementen ungleich Null ist.

0

versuchen diese

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

Würde Ihnen das nicht sagen, ob es _didnot_ das andere Element enthält? – ksoo

1

Die meisten dieser Antworten sind groß, aber es gibt eine new method called contains(container,contained) (hinzugefügt in 1.4), dass ein Boolean zurück! Es ist im Grunde das gleiche wie Blenders Code-Schnipsel, aber es ist wahrscheinlich schneller, sowohl zu tippen und auszuführen.

in Ihrem Code implementiert, würde es so aussehen:

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

Die meisten dieser Antworten sind falsch. Sie müssen übergeben einen DOM-Knoten kein jQuery-Element für $ .Contains ordnungsgemäß funktionieren, https://api.jquery.com/jQuery.contains/.

Zum Beispiel würden Sie feststellen, ob $('#a')$('#b) enthält.

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

Wenn Sie irgendeine tr Element mit der ID von myTable innerhalb Tisch sagen suchen können Sie folgenden Code verwenden können :

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

Auf diese Weise können wir überprüfen, ob die Tabelle eine Zeile enthält.

Verwandte Themen