我有一个数组,我用它来填充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号?
答案 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 ...