在arr.splice()之后更新变量

时间:2013-12-08 23:06:43

标签: javascript dom

我有一个数组,我用它来填充div并根据它们在数组中的位置为它们分配ID。

我可以使用.splice()删除一个部分,但是在删除元素之后,该元素上的ID保持不变(这会影响我删除同一数组中后续项目的方式),直到我刷新页面。

例如,它以

开头
<div id="favorites-1"></div>
<div id="favorites-2"></div>
<div id="favorites-3"></div>

当我删除其中一个div时,请说<div id="favorites-1"></div>我希望<div id="favorites-2"></div>现在成为新的<div id="favorites-1"></div>,而收藏夹-3将成为收藏夹-2。

如果我从右到左删除元素就可以了。如果我从左到右删除元素,实际上只删除了第一个元素。

如何根据JavaScript或jQuery的位置更新ID号?

2 个答案:

答案 0 :(得分:1)

//splice the array
arr.splice(x,y,replacements)
//iterate from the first modified item in the list and set the correct ID 
for(var i=x; i<arr.length; i++) {
    arr[i].id = "favorites-"+i;
}

是手动方式。

但是如果你想做很多像这样的事情,我建议你使用Knockout.js或类似的库。使用knockout,你会有一个可观察的项目数组,你可以添加项目,你可以自动将id映射到元素的索引。例如,它可能看起来像这样。

<!-- ko foreach: myItems -->
<div data-bind="attr:{id:'favorites-'+$index"></div>
<!-- /ko -->

您也可以使用其他库(如AngularJS或EmberJS)执行此操作,但是knockout是针对将数据模型绑定到DOM的特定问题的重点库。

答案 1 :(得分:0)

您可以使用delete实现稀疏数组(然后您不需要更改元素的ID):

var a = [0,1,2,3];
delete a[1]; // Key "1" was deleted

买者

即使没有4键,数组的长度仍为1。如果您根据长度循环数组,那么undefined将获得a[1]。如果您使用for..in进行迭代,则会从关键"0"跳至"2",但that might cause other problems ...