แถวของตารางและหมายเลขคอลัมน์ใน jQuery


141

ฉันจะรับหมายเลขแถวและคอลัมน์ของเซลล์ตารางที่ถูกคลิกโดยใช้ jQuery ได้อย่างไร

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

คำตอบ:


216

คุณสามารถใช้ฟังก์ชันCore / indexในบริบทที่กำหนดตัวอย่างเช่นคุณสามารถตรวจสอบดัชนีของ TD ใน parent parent TR เพื่อรับหมายเลขคอลัมน์และคุณสามารถตรวจสอบดัชนี TR บนตารางเพื่อรับหมายเลขแถว:

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

ตรวจสอบตัวอย่างที่ทำงานที่นี่


ทำไมมันถึงล้มเหลวในช่วงคอลัมน์ @grom
EarlyPoster

@Forkrul ถล่ม, @CMS มันล้มเหลวด้วยROWSPAN's jsbin.com/eyeyu/1099/edit#previewคลิกที่เซลล์ที่มีข้อความ"12" ดัชนีคอลัมน์ต้องเป็น4
แอนดรูดี.

ผมมีข้อมูลบางอย่างในตัวแปร "ข้อมูลที่" ..... มันเป็นไปได้ที่จะผนวกนี้ "ข้อมูล" ในตารางที่มีคอลัมน์นี้และค่าแถว
shanish


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



21

จากด้านบนของหัวของฉันวิธีหนึ่งคือการคว้าองค์ประกอบก่อนหน้านี้ทั้งหมดและนับพวกเขา

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

6

คุณสามารถส่งออกข้อมูลในเซลล์ขณะที่คุณกำลังสร้างตารางได้หรือไม่?

ดังนั้นตารางของคุณจะเป็นดังนี้:

<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>

แล้วมันจะเป็นเรื่องง่าย

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

1
คุณสมบัติ html ใดที่สอดคล้องกับ? ฉันดูเหมือนจะไม่พบพวกเขา
Samantha Branham

5
HTML spec 5 ซึ่งอนุญาตให้ใช้แอตทริบิวต์ที่กำหนดเองที่ขึ้นต้นด้วยคำนำหน้า 'data-'
Chris Brandsma

แม้ว่าพวกเขาจะไม่ได้อยู่ในสเป็ค แต่ก็จะไม่ทำลายเบราว์เซอร์รุ่นเก่า <HTML5
Daniel Powell

1
คุณสามารถเข้าถึงฟิลด์ "data" เพียงแค่โทร: $ (this) .data ('row');
WhiteAngel

0

มันจะดีกว่าที่จะผูกตัวจัดการคลิกไปที่ตารางทั้งหมดแล้วใช้ event.target เพื่อรับ TD ที่ถูกคลิก นั่นคือทั้งหมดที่ฉันสามารถเพิ่มเป็น 1:20


แม้ว่านี่อาจเป็นคำแนะนำที่มีค่าในการแก้ปัญหา แต่คำตอบที่ดีก็แสดงให้เห็นถึงวิธีการแก้ไข โปรดแก้ไขเพื่อให้รหัสตัวอย่างเพื่อแสดงความหมายของคุณ หรือลองเขียนสิ่งนี้เป็นความคิดเห็นแทน
Toby Speight

1
ขอบคุณฉันจะพิจารณาทบทวนคำตอบนี้ในอีก 10 ปี
mkoryak
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.