【问题标题】:jQuery get table header name of clicked cell with idjQuery获取带有id的单击单元格的表头名称
【发布时间】:2026-01-16 01:15:02
【问题描述】:

我有一张表,在该表中我有id="edit" 的值。现在,我想要的是在单击任何单元格时获取相应列的标题名称。到目前为止,根据之前提出的问题,我所拥有的是:

$('body').on('click', 'td#edit', function() {  
    var th = $('this').closest('th').eq($('th').val());
    alert(th);        // returns [object Object]
    .........................
}

你能帮我解决这个问题吗?

HTML:

<table id="myTable" class="myTable">
<tbody>
    <tr>
        <th>Select</th>
        <th>JobNo</th>
        <th>Customer</th>
        <th>JobDate</th>
        <th>Warranty</th>
        <th>RepairStatus</th>
        <th>POP</th>
        <th>DOA</th>
        <th>Model</th>
        <th>SN</th>
    </tr>
    <tr>
        <td class="check">
            <input type="checkbox" value="12345">
        </td>
        <td class="edit">
            <b>12345</b>
        </td>
        <td class="edit">gdsgasdfasfasdfa</td>
        <td class="edit">2011-01-21</td>
        <td class="edit">TRUE</td>
        <td class="edit">RP</td>
        <td class="edit">FALSE</td>
        <td class="edit">0</td>
        <td class="edit">5152342</td>
        <td class="edit">66665464</td>
    </tr>
</tbody>

【问题讨论】:

  • 你不应该有valuesid=edit id 应该是唯一的
  • 你是否多次使用同一个id?你用id="edit" 写了你有价值s。 ID 应该是唯一的
  • HTML 标记是什么??
  • 'id' 应该始终是唯一的。你不能把 id="edit" 给所有的 td。
  • 不管是class还是id,都解决不了我的问题。那不是我问的问题

标签: jquery html-table cell


【解决方案1】:

对于这个标记

<table>
    <tr class="header">
        <th>Header One</th>
        <th>Header Two</th>
        <th>Header Three</th>
    </tr>
    <tr>
        <td class="edit">One</td>
        <td class="edit">Two</td>
        <td class="edit">Three</td>
    </tr>
    <tr>
        <td class="edit">One</td>
        <td class="edit">Two</td>
        <td class="edit">Three</td>
    </tr>
</table>

你可以使用这个 jQuery 代码:

$(".mytable").on('click', 'td.edit', function(e) {
    var index = $(this).index();
    var table = $(this).closest('table');
    console.log(table.find('.header th').eq(index).text());  // returns the header text  
});

在这里提琴:http://jsfiddle.net/7qXm8/

【讨论】:

    【解决方案2】:

    函数closest()DOM 树的祖先中循环,并且th 不是td 的父级,因此最接近不是正确的选项。如果您对多个元素具有相同的 id,首先使用类。其次使用index()找到td对应的th。为了具体将id分配给父表,以便脚本不会对页面上的其他tables / td进行操作。

    Live Demo

    HTML

    <table id="tbl1" border="1">
        <tr>
            <th>heading 1</th>
            <th>heading 2</th>
        </tr>
        <tr>
            <td class="edit">row 1, cell 1</td>
            <td class="edit">row 1, cell 2</td>
        </tr>
        <tr>
            <td class="edit">row 2, cell 1</td>
            <td class="edit">row 2, cell 2</td>
        </tr>
    </table>
    

    Javascript

    $('#tbl1').on('click', '.edit', function () {
        var th = $('#tbl1 th').eq($(this).index());
        alert(th.text()); // returns text of respective header
    });
    

    【讨论】:

    • 这可行,但返回错误的标题,并且总是相同的。我将使用 HTML 标记更新我的问题。
    • 这行得通。但我想再多加一点麻烦你:) 由于表中加载了 Ajax,我需要$('body').on('click', '.edit', function() { 才能正确注册事件。当我将您的代码放入此函数时,它每次都会循环 +1。所以当我第一次点击我得到JobNo,第二次我得到JobNo \n JobNo等等......我该如何解决这个问题?
    • 是的,请给我一点时间来弄清楚,因为我之前没有使用过 jsfiddle ;)
    • 您需要将事件委托给在用于绑定时存在的元素,因为您的表不存在它不绑定,您可以绑定到最近的父级或文档或 document.body ,在这里查看,jsfiddle.net/cFWtu/2
    • 我可以发誓我试过了,但没用:|可能犯了一些愚蠢的错误...无论如何,非常感谢您的帮助,这解决了问题! :))