如果点击孩子td怎么办?

时间:2014-09-15 14:32:33

标签: javascript jquery html

我尝试获取所点击的<th>项的<td>内容。

这里是小提琴:http://jsfiddle.net/zrccq447/

事实是,<th>可以有colspan 2或3,这就是我被卡住的地方。这是我的代码

$('#table9').on('click', 'td:not(:nth-child(1))', function () {
   var td = $(this);
   var clicked_pos = td.index();
   var x = $('#headerx9 th:nth-child(' + (clicked_pos) + ')').text();
   var xy = td.text();
   alert(x);
});

我希望x成为点击<th>的{​​{1}}。现在的问题是,如果您点击与td共享td的某些th,我的错误td

感谢任何帮助

3 个答案:

答案 0 :(得分:4)

我已使用此处的答案更新了您的JsFiddle:Finding a colSpan Header for one of the cells or td's is Spans

JsFiddle:http://jsfiddle.net/zrccq447/4/

$('#table9').on('click', 'td:not(:nth-child(1))', function () {
    var td = $(this);
    var clicked_pos = td.index();
    var x = $('#headerx9 th:nth-child(' + thLocator[clicked_pos] + ')').text();
    var xy = td.text();
    alert(x);
});

var thLocator = [], colCount = 1;
$('#table9').find('tr:first th').each(function () {
    for (var i = 0; i < this.colSpan; i++) {
        thLocator.push(colCount);
    }
    colCount++;
});

答案 1 :(得分:2)

根据我的评论,你需要总结每个TH的colspans(或默认值1),直到你得到足够匹配你想要的列:

http://jsfiddle.net/TrueBlueAussie/zrccq447/5/

$('#table9').on('click', 'td:not(:nth-child(1))', function () {
    var td = $(this);
    var clicked_pos = td.index();
    var cols = 0;
    var $table = td.closest('table');
    var $ths = $table.find('tr th');
    for (var i = 1; i < $ths.length; i++) {
        var $th = $ths.eq(i);
        cols += ~~$th.attr('colspan') || 1;
        if (cols >= clicked_pos) {
            var x = $th.text();
            alert(x);
        break;
        }
    }
});

我试图保持它的通用性,因此它可以动态找到合适的表和标题。

答案 2 :(得分:2)

一种方法是按顺序在数组中存储对每个TH的引用,并根据td的位置调用数组中的文本。

var thholder = $('table th'),
    th = [];
for(var i = 0; i < thholder.length; i++) {
    var thi = $(thholder[i]);
    for(var j = 0; j < (thi.attr('colspan') || 1); j++) {
        th.push(thi);
    }
}
$('#table9').on('click', 'td:not(:nth-child(1))', function () {
    var td = $(this);
    var clicked_pos = td.index();
    alert(th[clicked_pos].text());
});

http://jsfiddle.net/zrccq447/3/

此代码未进行优化,但显示了该方法: 循环遍历表中的所有TH。 如果TH没有属性'colspan',则将该属性设置为值1。 为colspan的每个值创建一个循环,并保存对数组中当前TH的引用。

点击TD时,点击它的位置并检索阵列中该位置的TH文本并提醒它:)