質問
特定の一致セットの後、または代わりに、一致セットが空の場合はテーブルの最後に新しい TR をテーブルに追加したいと思います。次の html があるとします。
<table id="blax">
<thead>
</thead>
<tbody>
<tr class="alpha">
<td>some stuff</td>
<td>more stuff</td>
</tr>
<tr class="alpha">
<td>some stuff</td>
<td>more stuff</td>
</tr>
<!-- new "alpha" tr to go here-->
<tr class="beta">
<td>some stuff</td>
<td>more stuff</td>
</tr>
<tr class="beta">
<td>some stuff</td>
<td>more stuff</td>
</tr>
<!-- but new "gamma" tr to go at end-->
</tbody>'
</table>
たとえば、一致したセットの後に新しい tr を追加する方法を知っています。
var b = $('#blax tbody');
var newAlphaTr = $('<tr class="alpha"></tr>')
.insertAfter(b.find('tr.alpha:last'));
gamma
しかし、クラス(テーブルにはまだ存在しない)に対して同じコードを実行するとどうなるでしょうか? アルファ挿入に使用したのと同じコードを使用して<tr class="gamma"></tr>
、新しい要素の挿入ポイントをテーブルの最後に配置する簡単な方法は何ですか?
function insertAtPosition(parentElement, afterElement, newElement) {
// some code here that does the job for either "alpha" or "gamma"
}
function creatElement(className) {
insertAtPosition(
b,
b.find('tr.' + className + ':last'),
$('<tr class="' + className + '"></tr>'
);
}
createElement('alpha');
createElement('gamma');
「some code here」ブロックに記入するのに助けが必要です。
では、暇つぶしにおしゃべりしましょう
ちなみにinsertAfter
、挿入された要素または追加されたアイテムを返しますか? 方法や仕事のようにafter
、挿入されたアイテムを返し、それが添付されたアイテムを返すと思いますか?jQuery のドキュメントは優れていますが、各関数から返されるものがリストされていないなど、いくつかの大きな穴があります (これを見逃す人がいることに非常に困惑しています)。実際、私がこの質問を書いていたとき、私が正しく理解していることを確認するには、かなりの集中力が必要でした.insertAfter
append
appendTo
ぼんやり考えただけで、アイテムが追加されるすべての後にインデックス位置または直接の子要素(または直接の子要素のセット)であるオプションのパラメーターがサポートされてappend
いればいいでしょう。appendTo
インデックスの場合、0 または -1 が最初の子であることを意味するように、目的の位置またはアイテムを挿入する位置のいずれかになります。
var b = $('#blax tbody');
var newAlphaTr = $('<tr class="alpha"></tr>')
.appendTo(b, $('tr.alpha', b));
// or perhaps a selector
var newAlphaTr2 = $('<tr class="alpha"></tr>')
.appendTo(b, 'tr.alpha:last');
alpha
これにより、指定された子セットの後にクラスを持つ新しい tr が挿入されます。:last
セレクターに追加することもできますが、この方法がいいでしょう。「td.alpha」の一致したセットが空の場合、append が通常行うように動作し、既存の子の後に配置されます。