รับเนื้อหาของแถวตารางด้วยการคลิกปุ่ม


91

ฉันต้องการดึงรายละเอียดของแต่ละคอลัมน์ในตารางของฉัน ตัวอย่างเช่นคอลัมน์ "Name / Nr."

  • ตารางประกอบด้วยที่อยู่จำนวนหนึ่ง
  • คอลัมน์สุดท้ายของแต่ละแถวมีปุ่มที่ให้ผู้ใช้เลือกที่อยู่ในรายการ

ปัญหา:รหัสของฉันเลือกเฉพาะรหัสแรก<td>ที่มีคลาสnrเท่านั้น ฉันจะทำงานนี้ได้อย่างไร

นี่คือบิต jQuery:

$(".use-address").click(function() {
    var id = $("#choose-address-table").find(".nr:first").text();
    $("#resultas").append(id); // Testing: append the contents of the td to a div
});

ตาราง:

<table id="choose-address-table" class="ui-widget ui-widget-content">
    <thead>
        <tr class="ui-widget-header ">
            <th>Name/Nr.</th>
            <th>Street</th>
            <th>Town</th>
            <th>Postcode</th>
            <th>Country</th>
            <th>Options</th>
        </tr>
    </thead>
    <tbody>
        <tr>
            <td class="nr"><span>50</span>
            </td>
            <td>Some Street 1</td>
            <td>Leeds</td>
            <td>L0 0XX</td>
            <td>United Kingdom</td>
            <td>
                <button type="button" class="use-address" />
            </td>
        </tr>
        <tr>
            <td class="nr">49</td>
            <td>Some Street 2</td>
            <td>Lancaster</td>
            <td>L0 0XX</td>
            <td>United Kingdom</td>
            <td>
                <button type="button" class="use-address" />
            </td>
        </tr>
    </tbody>
</table>

3
นี่คือบทช่วยสอนที่สมบูรณ์พร้อมการสาธิตสดเกี่ยวกับวิธีรับค่า TD ของเซลล์ตารางcodepedia.info/jquery-get-table-cell-td-value-div
Satinder singh

คำตอบ:


265

เป้าหมายของแบบฝึกหัดคือการค้นหาแถวที่มีข้อมูล เมื่อเราไปถึงที่นั่นเราสามารถดึงข้อมูลที่ต้องการได้อย่างง่ายดาย

ตอบ

$(".use-address").click(function() {
    var $item = $(this).closest("tr")   // Finds the closest row <tr> 
                       .find(".nr")     // Gets a descendent with class="nr"
                       .text();         // Retrieves the text within <td>

    $("#resultas").append($item);       // Outputs the answer
});

ดูการสาธิต

ตอนนี้เรามาดูคำถามที่พบบ่อยในสถานการณ์เช่นนี้

จะหาแถวที่ใกล้ที่สุดได้อย่างไร?

ใช้.closest():

var $row = $(this).closest("tr");

ใช้.parent():

คุณยังสามารถย้ายโครงสร้าง DOM ขึ้นโดยใช้.parent()วิธีการ นี่เป็นเพียงทางเลือกที่บางครั้งถูกนำมาใช้ร่วมกับและ.prev().next()

var $row = $(this).parent()             // Moves up from <button> to <td>
                  .parent();            // Moves up from <td> to <tr>

รับ<td>ค่าเซลล์ตารางทั้งหมด

ดังนั้นเราจึงมีของเรา$rowและเราต้องการส่งออกข้อความเซลล์ตาราง:

var $row = $(this).closest("tr"),       // Finds the closest row <tr> 
    $tds = $row.find("td");             // Finds all children <td> elements

$.each($tds, function() {               // Visits every single <td> element
    console.log($(this).text());        // Prints out the text within the <td>
});

ดูการสาธิต

รับ<td>ค่าเฉพาะ

คล้ายกับก่อนหน้านี้อย่างไรก็ตามเราสามารถระบุดัชนีของ<td>องค์ประกอบลูกได้

var $row = $(this).closest("tr"),        // Finds the closest row <tr> 
    $tds = $row.find("td:nth-child(2)"); // Finds the 2nd <td> element

$.each($tds, function() {                // Visits every single <td> element
    console.log($(this).text());         // Prints out the text within the <td>
});

ดูการสาธิต

วิธีการที่เป็นประโยชน์

  • .closest() - รับองค์ประกอบแรกที่ตรงกับตัวเลือก
  • .parent() - รับพาเรนต์ของแต่ละองค์ประกอบในชุดองค์ประกอบที่ตรงกันปัจจุบัน
  • .parents() - รับบรรพบุรุษของแต่ละองค์ประกอบในชุดองค์ประกอบที่ตรงกันปัจจุบัน
  • .children() - รับลูกของแต่ละองค์ประกอบในชุดขององค์ประกอบที่ตรงกัน
  • .siblings() - รับพี่น้องของแต่ละองค์ประกอบในชุดขององค์ประกอบที่ตรงกัน
  • .find() - รับลูกหลานของแต่ละองค์ประกอบในชุดองค์ประกอบที่ตรงกันปัจจุบัน
  • .next() - รับพี่น้องที่ตามมาทันทีของแต่ละองค์ประกอบในชุดขององค์ประกอบที่ตรงกัน
  • .prev() - รับพี่น้องที่อยู่ก่อนหน้าทันทีของแต่ละองค์ประกอบในชุดขององค์ประกอบที่ตรงกัน

จะเกิดอะไรขึ้นถ้าฉันมีป๊อปอัปและต้องการเข้าถึงตารางจากเพจและลบแถว ฉันลองวิธีหนึ่งแล้ว แต่มันไม่ได้ผลสำหรับฉัน: /
Si8

เตรียม jsFiddle ได้ไหม
martynas

1
ที่นี่ฉันมีปัญหาที่คล้ายกันในการจัดการค่า ID ไดนามิก โปรดดูstackoverflow.com/questions/25772554/…
Sanjeev4evr

5
Dunno ว่าคำตอบนี้ไม่ได้รับการโหวตมากขึ้น เคล็ดลับสุดล้ำ! เพียงแค่ต้องการเพิ่มคุณจะได้รับค่าคอลัมน์เช่นนี้เสมอหลังจากได้รับแถวเฉพาะ $ (this) .closest ("tr"). find ("td: eq (2)"). html (); คุณจะได้รับคอลัมน์หมายเลข 2 ไชโย!
Matias

1
ฉันยังคงใช้คำตอบนี้เป็นครั้งคราว มีประโยชน์จริง ๆ และมีการปรับเปลี่ยนเล็กน้อยโดยทั่วไปใช้งานได้กับทุกโต๊ะ!
Mese

11

ลองสิ่งนี้:

$(".use-address").click(function() {
   $(this).closest('tr').find('td').each(function() {
        var textval = $(this).text(); // this will be the text of each <td>
   });
});

สิ่งนี้จะค้นหาปุ่มที่ใกล้เคียงที่สุดtr(ขึ้นไปใน DOM) ของปุ่มที่คลิกในปัจจุบันแล้ววนซ้ำtd- คุณอาจต้องการสร้างสตริง / อาร์เรย์ที่มีค่า

ตัวอย่างที่นี่

รับที่อยู่แบบเต็มโดยใช้ตัวอย่างอาร์เรย์ที่นี่


10

คุณต้องเปลี่ยนรหัสของคุณเพื่อค้นหาแถวที่สัมพันธ์กับปุ่มที่ถูกคลิก ลองสิ่งนี้:

$(".use-address").click(function() {
    var id = $(this).closest("tr").find(".nr").text();
    $("#resultas").append(id);
});

ตัวอย่างซอ


4
function useAdress () { 
var id = $("#choose-address-table").find(".nr:first").text();
alert (id);
$("#resultas").append(id); // Testing: append the contents of the td to a div
};

จากนั้นบนปุ่มของคุณ:

onclick="useAdress()"

1
ที่มีปัญหาเช่นเดียวกับรหัสในคำถาม - จะได้รับรหัสจากแถวแรกในตารางเสมอไม่ว่าปุ่มของแถวใดที่คลิก
dgvid

3

ตัวเลือก".nr:first"กำลังมองหาองค์ประกอบแรกและองค์ประกอบแรกเท่านั้นที่มีคลาส"nr"ภายในองค์ประกอบตารางที่เลือก หากคุณแทนที่จะเรียกคุณจะได้รับทุกองค์ประกอบภายในตารางมีระดับ.find(".nr") "nr"เมื่อคุณมีทุกองค์ประกอบที่คุณสามารถใช้.eachวิธีการในการย้ำกว่าพวกเขา ตัวอย่างเช่น:

$(".use-address").click(function() {
    $("#choose-address-table").find(".nr").each(function(i, nrElt) {
        var id = nrElt.text();
        $("#resultas").append("<p>" + id + "</p>"); // Testing: append the contents of the td to a div
    });
});

แต่ที่จะให้คุณได้รับทั้งหมดของtd.nrองค์ประกอบในตารางไม่ได้เป็นเพียงหนึ่งในแถวที่ถูกคลิก หากต้องการ จำกัด การเลือกของคุณให้อยู่ในแถวที่มีปุ่มคลิกให้ใช้วิธีการ. closestดังนี้:

$(".use-address").click(function() {
    $(this).closest("tr").find(".nr").each(function(i, nrElt) {
        var id = nrElt.text();
        $("#resultas").append("<p>" + id + "</p>"); // Testing: append the contents of the td to a div
    });
});

0

ค้นหาองค์ประกอบที่มี id ในแถวโดยใช้ jquery

$(document).ready(function () {
$("button").click(function() {
    //find content of different elements inside a row.
    var nameTxt = $(this).closest('tr').find('.name').text();
    var emailTxt = $(this).closest('tr').find('.email').text();
    //assign above variables text1,text2 values to other elements.
    $("#name").val( nameTxt );
    $("#email").val( emailTxt );
    });
});

0
var values = [];
var count = 0;
$("#tblName").on("click", "tbody tr", function (event) {
   $(this).find("td").each(function () {
       values[count] = $(this).text();
       count++;
    });
});

ตอนนี้อาร์เรย์ค่ามีค่าเซลล์ทั้งหมดของแถวนั้นที่สามารถใช้ได้เช่นค่า [0] ค่าเซลล์แรกของแถวที่คลิก


0

นี่คือรหัสที่สมบูรณ์สำหรับตัวอย่างง่ายๆของผู้รับมอบสิทธิ์

<!DOCTYPE html>
<html lang="en">
<head>
  <title>Bootstrap Example</title>
  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">
  <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
  <script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>

</head>
<body>

<div class="container">
  <h2>Striped Rows</h2>
  <p>The .table-striped class adds zebra-stripes to a table:</p>            
  <table class="table table-striped">
    <thead>
      <tr>
        <th>Firstname</th>
        <th>Lastname</th>
        <th>Email</th>

      </tr>
    </thead>
    <tbody>
      <tr>
        <td>John</td>
        <td>Doe</td>
        <td>john@example.com</td>
        <td>click</td>
      </tr>
      <tr>
        <td>Mary</td>
        <td>Moe</td>
        <td>mary@example.com</td>
        <td>click</td>
      </tr>
      <tr>
        <td>July</td>
        <td>Dooley</td>
        <td>july@example.com</td>
        <td>click</td>
      </tr>

    </tbody>
  </table>
  <script>
  $(document).ready(function(){
  $("div").delegate("table tbody tr td:nth-child(4)", "click", function(){
  var $row = $(this).closest("tr"),        // Finds the closest row <tr> 
    $tds = $row.find("td:nth-child(2)");
     $.each($tds, function() {
        console.log($(this).text());
        var x = $(this).text();
        alert(x);
    });
    });
});
  </script>
</div>

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