2016-10-25 1 views
0

Hier ist ein Teil meiner TabellejQuery passender Tisch mit Array

<table> 
    <tr> 
    <td>jack</td> 
    <td>20</td> 
    <td>450</td> 
    </tr> 
    <tr> 
    <td>james</td> 
    <td>20</td> 
    <td>450</td> 
    </tr> 
    <tr> 
    <td>john</td> 
    <td>20</td> 
    <td>450</td> 
    </tr> 
</table> 

Mein jQuery-Code wie dies

var toShow = [ 
    "jack", 
    "john" 
]; 

var addClass = [ 
    "jack" 
]; 


$('tr:contains(toShow)').remove(); 
$('tr:contains(addClass)').addClass("done"); 

sieht das Ziel toShow Array mit meinem Tisch vergleichen ist. Wenn keine Zeichenfolge vorhanden ist, entfernen Sie das tr-Element. Wenn meine Tabelle das Element von addClass als Klasse hinzufügt.

Ich bin nicht sicher, warum mein Code nicht funktioniert. Ergebnis shoud aus der Tabelle zuletzt tr Element entfernen und für das erste Add-Klasse .done

+0

$ ('tr: contains (xxxx)') übergibt die var nicht an die enthält müssen Sie auch Anführungszeichen und wahrscheinlich Schleife verwenden. JS funktioniert nicht durch Wunschdenken. Sehen Sie die [Dokumentation] (https://api.jquery.com/contains-selector/) – mplungjan

+0

http://api.jquery.com/filter/ könnte Ihnen helfen – Satpal

+0

Ich frage mich, warum führen 'Entfernen' zu Werten innerhalb' toShow 'Array ... – DontVoteMeDown

Antwort

2

Versuchen Sie, diese

var toShow = [ 
 
    "jack", 
 
    "john" 
 
]; 
 

 
var addClass = [ 
 
    "jack" 
 
]; 
 

 
toShow.forEach(function(item){ 
 
    $('tr:contains(' + item + ')').remove(); 
 
}); 
 

 
addClass.forEach(function(item){ 
 
    $('tr:contains(' + item + ')').addClass("done"); 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<table> 
 
    <tr> 
 
    <td>jack</td> 
 
    <td>20</td> 
 
    <td>450</td> 
 
    </tr> 
 
    <tr> 
 
    <td>james</td> 
 
    <td>20</td> 
 
    <td>450</td> 
 
    </tr> 
 
    <tr> 
 
    <td>john</td> 
 
    <td>20</td> 
 
    <td>450</td> 
 
    </tr> 
 
</table>

Da die addClass Array-Element aus dem DOM gelöscht wurde bereits, Sie don Ich sehe keine Klasse hinzugefügt werden.

+0

@mplungjan sehen möchten, fügt es nicht seit' jack' Element hinzu wurde bereits gelöscht basierend auf 'toShow' Array – gurvinder372

+0

@mplungjan Wenn ich das Element in' James' ändern, dann funktioniert es. – gurvinder372

+0

Ja, ich könnte mir nicht vorstellen, später Sachen zu entfernen, um eine Klasse hinzuzufügen – mplungjan

1

Ich bin nicht sicher, warum mein Code nicht funktioniert.

Weil du buchstäblich es fragst den Text toShow zu finden, sind Sie einen Wert von Ihrem toShow Objekt nicht verwenden.

Um dies zu tun, verwenden Sie String-Verkettung, wenn Sie :contains verwenden möchten; Um alle Werte zu verwenden, müssen Sie einen Mehrfachselektor verwenden.

$('tr:contains(' + toShow.join('), tr:contains(') + ')').remove(); 

..., die diesen Selektor-String mit Ihrem Beispiel erstellt:

$('tr:contains(jack), tr:contains(john)').remove(); 

Oder natürlich Schleife durch das Array und behandeln jeden Eintrag einzeln, wieder mit String-Verkettung.

+0

Danke, aber es macht gegenüber was ich will. Ich wollte nur die toShow-Arrays anzeigen. – Ostrov

+0

@Ostrov: Es ist schwer zu lesen '$ ('tr: contains (toShow)'). Remove();' als etwas anderes als "entfernen Sie die Elemente, die enthalten, was in' toShow' ". Aber passen Sie einfach die Logik an, wie Sie wollen, die grundlegende Sache ist die String-Verkettung. –