0

要素属性に基づいて HTML テーブルを作成する xslt テンプレートがあります。テンプレートはテーブルを として識別しますdetailTable。この同じIDを持つ複数のテーブルを持つことができます。jQuery を使用しTHて、データのない s を含む列を非表示にしています。私の問題は、jQuery で各テーブルを見つける方法です。次のコードを 1 つのテーブルで動作させることができますが、複数のテーブルがある場合は動作しません。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 をクラスに変更して試してください。

同じ ID を複数回使用しないでください。

于 2012-08-08T14:08:43.777 に答える