我正在创建一个表示数据绑定表的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
会更好吗?
答案 0 :(得分:1)
从技术上讲,jQuery do add splice()
to jQuery.fn
,但没有记录。最近来自公共界面的They almost removed it,但决定反对它;
我们希望避免使用这些方法[jQuery.fn。{push,sort,splice}]的外观,但我们也不想删除它们。
......按照你的意愿制作。
您可以使用Array.prototype.splice.call
,例如:
Array.prototype.splice.call($table.$body.$rows, 3, 0, newItem);
......我看不出那是怎么回事。
虽然说实话,但我认为你正试图解决一个不存在的问题。
我可以让HTMLTableSectionElement.rows属性为我跟踪行,并在必要时简单地将特定行包装在jQuery对象中
......我会这样做的。在修改行时调用.children('tr')
并更新$table.$body.$rows
不会导致您的应用程序失效。
答案 1 :(得分:0)
您可以在本机数组对象上使用splice函数。
arr.splice(index, 0, item);
会将item
插入指定arr
的{{1}}。