问题
我想在给定匹配集之后在表中添加新TR,或者如果匹配集为空,则在表的末尾添加新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
运行相同的代码(表中还不存在),该怎么办?然后,使用与用于alpha插入相同的代码,将新<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');
这会在指定的子集之后插入一个带有类alpha
的新tr。我可以将:last
添加到选择器,但这种方式会很好。如果匹配的'td.alpha'集合为空,那么它通常会像追加一样,并将其放在现有子节点之后。
答案 0 :(得分:0)
<tbody id='zeta'/>
$('#zeta').append('<tr class="alpha"></tr>');
你愿意以if / else吗?
if($('。alpha')。length&gt; 0){
//附加在班级上
}其他{
//追加tbody
}
答案 1 :(得分:0)
自问问题以来,我已经有近2年的jQuery经验了,我现在可以看到答案很简单:
var b = $('#blax tbody'),
newAlphaTr = $('<tr class="alpha"></tr>')
.insertAfter(
b.find('tr.alpha:last, tr:last')
.first()
);
不是只在tr
上匹配所需的类,而是与最后的tr
匹配,而不管是哪个类。然后,使用first()
抓取第一个,这将是我们想要插入的那个。问题解决了。