次の表があるとします。
<table id="incidents">
<thead>
<tr>
<th></th>
</tr>
</thead>
<tbody>
</tbody>
</table>
JQueryを使用すると、次のようにfalse
として評価されます。
$("#incidents tbody").is(":empty")
CSSを使用して、コンテンツをメッセージに設定したいと思います。
#incidents tbody:empty {
content: "<tr>message foo</tr>";
}
:empty
セレクターはtbodyに適用されますか?
いいえ、残念ながら、tbody
内のインデントと改行により、この場合は_:empty
_と一致しなくなります。これは、 [〜#〜] css [〜#〜] と jQuery の両方に当てはまります。ここで、私が知る限り、_:empty
_は、jQueryと同様に同じように動作します。 _:parent
_ 、これは:not(:empty)
と同等です(very名前の選択が不適切です)。
さらに、 CSS content
を使用してDOMに要素を追加することはできません 。これはjQueryまたはサーバー側で行う必要があります。tbody
に行があるかどうかを確認し、ない場合はその行を追加します。
JQueryを使用する場合は、次を使用できます。
_var tbody = $("#incidents tbody");
if (tbody.children().length == 0) {
tbody.html("<tr>message foo</tr>");
}
_
_:empty
_を使用する場合は、次のようなtbody構文を指定する必要があります。
_<tbody></tbody>
_
定義したように、:emptyは新しい行があるため、それをチェックしません。
私があなたに言ったようにtbody
を定義してください。 .html()
を使用して条件を確認することもできます。
_if(!$("#incidents tbody").html()) {}
_
<tbody>
には空白が含まれているため、空ではありません。これを回避するには、フィルタリング関数を使用する必要があります。
$("#incidents tbody").filter(function() {
return !$.trim($(this).text());
}).append('<tr>message foo</tr>');
または子供の数を数えます:
$("#incidents tbody").filter(function() {
return !$(this).children().length;
}).append('<tr>message foo</tr>');
参考:次のjQueryセレクターを使用すると、テーブル要素のIDに依存せずに、tbodyが空のテーブルを選択できます。
$("table:not(:has(>tbody>tr))")
使用する
$("#incidents tbody").html()
そして、あなたが得るものをチェックします。