匹配集后添加TR,或者如果jQuery中匹配集为空,则添加TR

时间:2010-10-26 20:59:28

标签: jquery insertafter

问题

我想在给定匹配集之后在表中添加新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会返回附加的项目,就像appendappendTo的工作方式一样,是吗? jQuery文档很不错,但是有一些很大的漏洞,例如没有列出每个函数返回的内容(我很惊讶任何人都会错过这个)。事实上,当我写这个问题时,需要花一些时间来确保我做对了。

只是空闲思考,如果appendappendTo支持一个可选参数,它可以是一个索引位置,也可以是一个直接子元素(或一组直接子元素)。该项目将被追加。在索引的情况下,它可以是期望的位置或插入项目之后的位置,因此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'集合为空,那么它通常会像追加一样,并将其放在现有子节点之后。

2 个答案:

答案 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()抓取第一个,这将是我们想要插入的那个。问题解决了。