如何在指定索引处向jQuery集合添加对象?

时间:2015-09-03 14:50:41

标签: javascript jquery single-page-application

我正在创建一个表示数据绑定表的JavaScript类,使用jQuery来处理DOM操作。该类具有$table.$body.$rows属性,其中我保留表的jQuery包装行的集合,以避免在添加或删除行时执行$table.$body.children('tr')调用。当一行进入或离开编辑模式时,我需要能够添加和删除$table.$body.$rows属性中的对象,这是我使用jQuery的.add().not()方法完成的。

但是,当正在编辑的行不在表的最后时,这些方法是不合适的,因为.add()方法将新项添加到jQuery实例中维护的内部集合的末尾。为了确保$table.$body.$rows集合的排序正确,我需要能够在jQuery集合中的指定索引处插入新项目。这种方法是否已经存在,或者我是否必须自己编写?

我可以让HTMLTableSectionElement.rows属性为我跟踪行,并在必要时简单地将特定行包装在jQuery对象中,但这似乎效率低下。这提出了一个次要问题:无论如何,像.children(' tr')这样的电话有多贵,而且每次添加或删除行时,我只会重新分配$table.$body.$rows会更好吗?

2 个答案:

答案 0 :(得分:1)

  1. 从技术上讲,jQuery do add splice() to jQuery.fn,但没有记录。最近来自公共界面的They almost removed it,但决定反对它;

      

    我们希望避免使用这些方法[jQuery.fn。{push,sort,splice}]的外观,但我们也不想删除它们。

    ......按照你的意愿制作。

  2. 可以使用Array.prototype.splice.call,例如:

    Array.prototype.splice.call($table.$body.$rows, 3, 0, newItem);
    

    ......我看不出那是怎么回事。

  3. 虽然说实话,但我认为你正试图解决一个不存在的问题。

      

    我可以让HTMLTableSectionElement.rows属性为我跟踪行,并在必要时简单地将特定行包装在jQuery对象中

    ......我会这样做的。在修改行时调用.children('tr')并更新$table.$body.$rows不会导致您的应用程序失效。

答案 1 :(得分:0)

您可以在本机数组对象上使用splice函数。

arr.splice(index, 0, item);会将item插入指定arr的{​​{1}}。