Вопрос
Я хотел бы добавить новый 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');
Мне нужна помощь в заполнении блока "некоторый код здесь".
Теперь немного болтовни
И случайно insertAfter
возвращает вставленный элемент или элемент, после которого он был добавлен? Я предполагаю, что after
возвращает вставленный элемент, а insertAfter
возвращает элемент, к которому он был прикреплен, например, как работают append
и appendTo
, да? Документы jQuery хороши, но в них есть некоторые большие дыры, такие как отсутствие списка того, что возвращается из каждой функции (и я довольно озадачен тем, как кто-то может пропустить это). На самом деле, когда я писал этот вопрос, потребовалась некоторая реальная концентрация, чтобы убедиться, что я понял правильно.
Просто лениво думая, было бы неплохо, если бы 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');
Это добавит новый tr с классом alpha
после указанного дочернего набора. Я мог бы добавить :last
к селектору, но это было бы неплохо. Если совпадающий набор 'td.alpha' пуст, он будет действовать так, как обычно делает append, и помещает его после существующих потомков.