Tabellenzeilen- und Spaltennummer in jQuery


141

Wie erhalte ich die Zeilen- und Spaltennummer der angeklickten Tabellenzelle mit jQuery, dh

$("td").onClick(function(event){
   var row = ...
   var col = ...
});

Antworten:


216

Sie können die Core / Index- Funktion in einem bestimmten Kontext verwenden. Sie können beispielsweise den Index des TD in seiner übergeordneten TR überprüfen, um die Spaltennummer zu erhalten, und Sie können den TR-Index in der Tabelle überprüfen, um die Zeilennummer zu erhalten:

$('td').click(function(){
  var col = $(this).parent().children().index($(this));
  var row = $(this).parent().parent().children().index($(this).parent());
  alert('Row: ' + row + ', Column: ' + col);
});

Prüfen Sie das laufende Beispiel hier .


Warum schlägt es in Spaltenbereichen @grom fehl?
EarlyPoster

@Forkrul Assail, @CMS Mit jsbin.com/eyeyu/1099/edit#preview ist ein Fehler ROWSPAN's aufgetreten. Klicken Sie auf die Zelle mit dem Text "12" .
Andrew D.

Ich habe einige Daten in der Variablen "Daten" ..... ist es möglich, diese "Daten" mit diesem
Spalten-

2
ROWSPAN & COLSPAN umgehen: Dies bewirkt, dass der Klick funktioniert, wenn SPAN verwendet wird. Jsbin.com/eyeyu/1307/edit
eddyparkinson

9
var row = $(this).closest('tr').index()
SpYk3HH

119
$('td').click(function() {
    var myCol = $(this).index();
    var $tr = $(this).closest('tr');
    var myRow = $tr.index();
});

32

Holen Sie sich COLUMN INDEX auf Klick:

$(this).closest("td").index();

Holen Sie sich ROW INDEX auf Klick:

$(this).closest("tr").index();

21

Eine Möglichkeit wäre, alle vorherigen Elemente zu erfassen und zu zählen.

$('td').click(function(){ 
    var colIndex = $(this).prevAll().length;
    var rowIndex = $(this).parent('tr').prevAll().length;
});

6

Können Sie diese Daten in den Zellen ausgeben, während Sie die Tabelle erstellen?

Ihr Tisch würde also so aussehen:

<table>
  <thead>...</thead>
  <tbody>
    <tr><td data-row='1' data-column='1'>value</td>
      <td data-row='1' data-column='2'>value</td>
      <td data-row='1' data-column='3'>value</td></tr>

  <tbody>
</table>

dann wäre es eine einfache Sache

$("td").click(function(event) {
   var row = $(this).attr("data-row");
   var col = $(this).attr("data-col");
}

1
Welcher HTML-Spezifikation entsprechen diese Attribute? Ich kann sie nicht finden.
Samantha Branham

5
HTML-Spezifikation 5, die benutzerdefinierte Attribute ermöglicht, die mit dem Präfix 'data-' beginnen.
Chris Brandsma

Auch wenn sie nicht in der Spezifikation sind, werden ältere Browser nicht beschädigt. <HTML5
Daniel Powell

1
Sie können auf "Daten" -Felder zugreifen, indem Sie einfach Folgendes aufrufen: $ (this) .data ('row');
WhiteAngel

0

Es ist besser, einen Klick-Handler an die gesamte Tabelle zu binden und dann event.target zu verwenden, um den angeklickten TD abzurufen. Das ist alles, was ich hinzufügen kann, da es 1:20 Uhr ist


Während dies ein wertvoller Hinweis zur Lösung des Problems sein kann, zeigt eine gute Antwort auch die Lösung. Bitte bearbeiten Sie , um einen Beispielcode bereitzustellen, der zeigt, was Sie meinen. Alternativ können Sie dies stattdessen als Kommentar schreiben.
Toby Speight

1
danke, ich werde erwägen, diese Antwort in weiteren 10 Jahren zu
überarbeiten
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.