2010-12-28 15 views
5

ich eine Tabelle und Markup nicht ändern kann:jQuery löschen Tabellenspalte

<table> 
    <thead> 
     <tr> 
      <th> 
       blablabla 
      </th> 
      <th> 
       blablabla 
      </th> 
     </tr> 
    </thead> 
    <tbody> 
     <tr> 
      <td> 
       efgd 
      </td> 
      <td> 
       efghdh 
      </td> 
     </tr> 
    </tbody> 
</table> 

Hier ist meine Funktion, die eine Spalte löschen sollte. Es wird beim Klicken auf die Zelle aufgerufen:

Aber es löscht etwas anderes, nicht die Spalte, die ich löschen wollte. Wo liege ich falsch?

+0

Ich kann Ihre Absicht hier nicht sehen, bitte geben Sie mehr spec . Sie möchten alles löschen oder nur bestimmte Spalten? –

Antwort

12

Eine Spalte ist ziemlich genau Zellen, Sie müssen also manuell alle Zeilen durchlaufen und die Zelle nach dem Index entfernen.

Diese sollten Sie die dritte Spalte einen guten Ausgangspunkt geben für die Entfernung:

$("tr").each(function() { 
    $(this).filter("td:eq(2)").remove(); 
}); 
+0

Das funktioniert nicht ganz. 'filter()' wird auf die 'tr' Elemente angewendet, nicht auf die' td' Elemente, so dass nichts entfernt wird. Stattdessen müssen Sie entweder '$ (this) .children(). Filter()' oder besser '$ (this) .find()' tun. – Mike

7

Diese .delegate() für den Handler verwendet, und einen nativen Ansatz cellIndex mit dem Zellenindex zu erhalten, die angeklickt wurde, und cells um die Zelle aus jeder Reihe zu ziehen.

Beispiel:http://jsfiddle.net/zZDKg/1/

$('table').delegate('td,th', 'click', function() { 
    var index = this.cellIndex; 
    $(this).closest('table').find('tr').each(function() { 
     this.removeChild(this.cells[ index ]); 
    }); 
}); 
5

Dies funktioniert gut für mich:

$(".tableClassName tbody tr").each(function() { 
    $(this).find("td:eq(3)").remove(); 
}); 
0

die erste Spalte aus jeder Zeile entfernen.

$('.mytable').find("tr td:nth-child(1)").each(function(){ 
    $(this).remove() 
}); 
1

Wenn Sie die statische HTML haben (man denke Tabelle mit 10 Spalten),

dann die erste Spalte entfernen zusammen mit Header unter Verwendung von:

$('#table th:nth-child(1),#table td:nth-child(1)').remove(); 

jetzt die neue Tabelle wird 9 haben Spalten, jetzt können Sie jede Spalte mit der Nummer entfernen:

$('#table th:nth-child(7),#table td:nth-child(7)').remove();