1

バックグラウンド:

ユーザーがコンテンツ領域内にテーブルを作成できる CMS ツールがあります。境界線のオプションが使用されている場合、ツールはテーブルに境界線属性を設定し、スタイルは使用しません。スタイルシートをリセットすると、デフォルトですべてのテーブルが境界線なしになり、これによりテーブルの境界線属性が上書きされます (つまり、境界線が表示されません)。

簡単なハックとして、border 属性が 0 以外のテーブル要素を取得し、border 属性をインライン スタイルに変換する jQuery をいくつか入れました。

私の質問:

コードを機能させることはできましたが、当初意図したソリューションではありません。

これは現在機能しています:

    $("table[border!='0']").css('border', function() { 
         return $(this).attr('border') + "px solid"; 
    });

私の最初の解決策は、cssメソッドで関数を必要としないことでした-

$("table[border!='0']").css('border', $(this).attr('border') + "px solid");

この質問を書いているときに、 $(this) が選択内の各項目を参照していないことに気付きました。関数内で参照しているため、私の問題です。

jsフィドル

関数なしでこれを達成する方法はありますか?

4

1 に答える 1

1

いいえ、機能を使用することが唯一の (そして最良の) 方法です。そうしないと、すべての項目に個別にアクセスできないからです。

あなたのコードにはバグが含まれていることに注意し$(this).attr['border']$(this).attr('border')くださいundefinedpx solid

ただし、大量の異なる値がない限り、borderCSS を使用できます。

table[border=1] { border: 1px solid; }
table[border=2] { border: 2px solid; }

明らかに、これは多くの異なる値で乱雑になりますが、多くの異なる境界線の幅がない可能性は十分にあります。

于 2012-07-10T11:35:37.710 に答える