在匹配集之后添加TR,如果jQuery中的匹配集为空,则在末尾添加TR

在匹配集之后添加TR,如果jQuery中的匹配集为空,则在末尾添加TR,jquery,insertafter,Jquery,Insertafter,问题 我想在给定的匹配集之后的表中添加一个新的TR,或者,如果匹配集为空,则在表的末尾添加一个新的TR。给定以下html: <table id="blax"> <thead> </thead> <tbody> <tr class="alpha"> <td>some stuff</td> <td>more stuff</td>

问题

我想在给定的匹配集之后的表中添加一个新的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>
我需要帮助填写这里的一些代码块

现在是闲聊

顺便问一下,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”集为空,那么它的行为将类似于append,并将其放在现有子级之后

<tbody id='zeta'/>

$('#zeta').append('<tr class="alpha"></tr>');
你愿意把它当作一个“如果/否则”来做吗

如果$'.alpha'.length>0{ //附加在类上 }否则{ //附加在tbody上
}

自从提出这个问题以来,我又积累了近2年的jQuery经验,现在我发现答案很简单:

var b = $('#blax tbody'),
   newAlphaTr = $('<tr class="alpha"></tr>')
      .insertAfter(
         b.find('tr.alpha:last, tr:last')
            .first()
      );

与只在tr上匹配所需的类不同,还要匹配最后一个tr,而不考虑类。然后,用first抓取第一个,这将是我们要在后面插入的。问题已解决。

请重新阅读问题。我希望新的tr在一个特定的位置进入表中,而不仅仅是在每次结束时。
<tbody id='zeta'/>

$('#zeta').append('<tr class="alpha"></tr>');
var b = $('#blax tbody'),
   newAlphaTr = $('<tr class="alpha"></tr>')
      .insertAfter(
         b.find('tr.alpha:last, tr:last')
            .first()
      );