0

我有一个基于元素属性创建 HTML 表的 xslt 模板。模板将表标识为detailTable. 我可以有几个具有相同 ID 的表。我正在使用 jQuery 来隐藏包含THs 且没有数据的列。我的问题是如何让 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();
        }                           
    });
});
4

3 回答 3

1

为什么会有多个具有相同 ID 的表?试着给他们上课,然后你可以这样做:

$('.detailTable th').each(function(i) {
    // code here...
});
于 2012-08-08T14:03:27.043 回答
0

问题可能是您有多个具有相同 ID 的表。那是不行的。而不是使用id属性,使用name并更改$('#detailTable th')$('table[name=detailTable] th')

编辑:

由于您的 XSLT 定义了需要使用的 ID,因此我能想到的所有尝试(如果您不能修改您的 XSLT)就是以其他方式引用您的表。在您使用它时删除他们的 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 编辑器中编写了此代码,因此可能需要进行一些调整,但您应该明白这一点。

于 2012-08-08T14:05:23.823 回答
0

我相信这是因为您有许多具有相同 ID 的表。

将 id 更改为 class 并尝试一下。

你真的不应该多次使用同一个 id。

于 2012-08-08T14:08:43.777 回答