一旦动态对象从DOM中移除,就从数组中移除它们
Remove dynamic objects from array once they're removed from the DOM
在示例中,我创建了一个按钮,用于向文档和数组添加一个新对象。单击每个对象将其从文档中删除。我怎样才能从数组中删除它呢?
小提琴在这里
<button id="btn">addBox</button>
<p style="font-size: 12px">click boxes to remove</p>
<p id="p2" style="font-size: 12px"></p>
<script>
$(document).ready(function() {
boxes = []
boxNumber = 0
function Box() {
this.output = $("<div />").addClass('box').attr('id', "box" + boxNumber++).appendTo("body");
boxes.push(this);
}
function addBox() {
var box = new Box();
$('.box').each(function() {
var boxID = $(this).attr('id');
$(this).text(boxID);
});
$('#p2').text(boxes);
}
function removeBox() {
$(this).remove();
}
$('body').on('click', '.box', function() {
$(this).remove();
});
$('#btn').click(addBox);
});
</script>
要从数组中删除一个元素,您可以找到它,然后使用.splice()
将其删除:
$('body').on('click', '.box', function() {
$(this).remove();
for (var i = 0; i < boxes.length; i++) {
if (boxes[i].output[0] === this) {
boxes.splice(i, 1);
break;
}
}
});
工作jsFiddle: http://jsfiddle.net/jfriend00/hMcyd/
我建议你可能不需要把box数组放在首位,因为你可以在任何时候根据需要在jQuery对象中使用它生成一个DOM元素数组:
var boxes = $(".boxes");
或者,如果你真的想把它们放在DOM元素数组中:
var boxes = $(".boxes").toArray();
这是常见的这些天不维护一个并行数组的元素在javascript中,你可以在任何时候从DOM动态检索,只要你需要他们。现在的cpu已经非常快了,用户触发的操作也会非常快,即使它是从使用DOM查询构建对象列表开始的。
正如@jfriend00所提到的,创建一个新数组会更容易…
$('body').on('click', '.box', function() {
$(this).remove();
boxes = $('.box');
});
这里有一个小提琴来演示…http://jsfiddle.net/qs55y/
在数组中搜索被单击框的id属性,并将该索引拼接到该数组中。
$('body').on('click', '.box', function() {
var self = $(this);
self.remove();
$.each(boxes, function(index, value){
if (this.output.attr('id') === self.attr('id')){
boxes.splice(index, 1);
return false;
}
});
});
你可以做很多事情,最简单的是在数组上做一个线性搜索,然后创建一个新的数组。这不是最有效的方法。我想补充一句,您应该重新考虑创建Box对象。
$('body').on('click', '.box', function() {
var tmp = [];
for(var i = 0; i < boxes.length; i++) {
if(boxes[i].output[0] === this) break;
tmp.push(boxes[i]);
}
boxes = tmp;
$(this).remove();
});
http://jsfiddle.net/gSH4T/2/相关文章:
- 从 DOM 中删除/删除 Javascript 用户定义的数组
- 从 DOM 数组中删除 DOM 对象
- 如何在 Knockout.js 中更新可观察数组后立即使用 DOM 容器
- jQuery“map”将中的数组转换为“dom”元素
- 在提取dom对象后,无法将每个名为tab的元素推送到数组中
- 使用DOM创建并填充一个带有javascript数组值的复选框列表
- DOM数组中的位置
- 返回所有DOM元素的数组,按深度排序
- 比较“;这个“;DOM数组中具有object的对象
- 在没有DOM附加的情况下将多个SVG加载到javascript数组中
- 如何使用js/jquery将数组中的数据属性获取到DOM上的h3中
- Polymer:当数组中的对象被外部代码修改时,更新dom重复元素
- Knockoutjs 模板:在通过某些属性过滤该数组后,如何将 1 个对象数组用于 2 个 DOM 元素
- 如何从 DOM 元素检索数据并将其推送到数组中
- JS - 从表单中获取输入并将其放入数组中,然后将新行附加到表中(DOM)
- 如何获取数组中每个 dom 元素的宽度
- 如何使用新数组更新 dom-repeat 列表
- 如何从 Javascript 数组中获取两个最大的整数并将值返回给 DOM
- javascript元素/标记数组DOM节点访问
- 我的函数使用关联数组(dom对象)和for循环的问题