使用JQuery隐藏没有带有相同表ID的数据(包括标题)的列

时间:2012-08-08 14:00:05

标签: javascript jquery html xslt

我有一个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();
        }                           
    });
});

3 个答案:

答案 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。