我有一个xslt模板,可以根据元素属性创建HTML表。该模板将表格标记为detailTable
。我可以有几个具有相同ID的表。我正在使用jQuery隐藏包含TH
s的列而没有数据。我的问题是如何让jQuery找到每个表。我可以使用以下代码在一个表上工作,但如果有多个表,它就不起作用。 jQuery代码如下:
$(document).ready(function() {
$('#detailTable th').each(function(i) {
var remove = 0;
var tds = $(this).parents('table').find('tr td:nth-child(' + (i + 1) + ')')
tds.each(function(j) { if (this.innerHTML == '') remove++; });
if (remove == ($('#detailTable tr').length - 1)) {
$(this).hide();
tds.hide();
}
});
});
答案 0 :(得分:1)
为什么你会有几个具有相同ID的表?尝试给他们一个班,然后你可以做:
$('.detailTable th').each(function(i) {
// code here...
});
答案 1 :(得分:0)
问题可能是您有多个具有相同ID的表。这是禁忌。不使用id
属性,而是使用name
并将$('#detailTable th')
更改为$('table[name=detailTable] th')
修改强>
由于你的XSLT定义了需要使用的ID,我能想到的所有尝试(如果你不能修改你的XSLT)都是以其他方式引用你的表。最好在您使用ID时删除它们的ID,或者将其更改为name
属性,如下所示:
$(document).ready(function() {
$('table th').each(function(i) {
var tbl = $(this).closest("table");
if(tbl.attr("id") == "detailTable") {
tbl.removeAttr("id").attr("name", "detailTable");
var remove = 0;
var tds = $(this).parents('table').find('tr td:nth-child(' + (i + 1) + ')')
tds.each(function(j) { if (this.innerHTML == '') remove++; });
if (remove == ($('#detailTable tr').length - 1)) {
$(this).hide();
tds.hide();
}
}
});
});
请注意,我刚刚在SO编辑器中写了这个,所以可能需要进行一些调整,但你应该明白这一点。
答案 2 :(得分:0)
我相信这是因为你有很多具有相同身份的表。
将id更改为类并尝试它。
你真的不应该多次使用同一个id。