我尝试获取所点击的<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
。
感谢任何帮助
答案 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文本并提醒它:)