我有一系列元素,我想有效地维护,随着时间的推移添加和删除元素数组。
var myElements = $('.initial');
jquery' merge()似乎非常适合添加项目,因为它不会创建新数组,只会添加到现有数组中:
$.merge(myElements, $('.to-add'));
是否有相应的删除功能,还可以就地修改数组?类似的东西:
$.exclude(myElements, $('.to-remove'));
我确实有DOM元素数组,而选择器只是用作示例。
答案 0 :(得分:2)
假设你在a的相对补充之后。 并且您不希望在处理过程中创建其他对象。 该函数适用于plain Array和jQuery set。 (因此使用$ .each,$ .inArray而不是Array.prototype.forEach Array.prototype.indexOf)
我写了一个符合你要求的功能。
$.exclude = function(a,b) {
var idx;
$.each(b, function(i, val) {
while((idx = $.inArray(val, a)) !== -1) {
a.splice(idx, 1);
}
})
return a;
}
在这里测试此代码 https://jsfiddle.net/happyhj/uwd4L1dm/8/
你可以这样使用。
$.exclude(myElements, $('.to-remove'));
答案 1 :(得分:1)
使用jquery not
方法,
var filtered = $(myElements).not($('.to-remove'));
答案 2 :(得分:0)
您可以使用delete
从数组中删除元素,然后使用$.grep
删除空白区域。
//[0] since $("#id") will be a jquery Object
//[0] will return the particular DOM element
var orgArray = [$("#merge1")[0],$("#merge2")[0],$("#merge3")[0]];
var secArray = [$("#merge4")[0],$("#merge5")[0]]
// Will merge other two values;
// jQuery merge will merge contents of
//two array into first array
var merArray = $.merge(secArray, orgArray);
// Want to remove $("#merge2");
var getIndex = merArray.indexOf($("#merge2")[0]);
if(getIndex >-1){
delete merArray[getIndex]
}
// length before filtering
$("#l1").text(merArray.length);
//Now will remove Empty Space
merArray = $.grep(merArray,function(n){
return n==0 || n
});
$("#l2").text(merArray.length);
答案 3 :(得分:0)
您正在使用适用于数组文字的方法。 jQuery已经有方法add()
,它将返回一个修改过的jQuery对象,该对象包含与选择器匹配的元素
var myElements = $('.initial');
var newCollection = myElements.add('.to-add');
newCollection.not('.to-remove').doSomething();
不要将jQuery对象视为数组,尽管它们是数组。
参考add()
目前尚不清楚您的总体目标是什么,但最有可能的是您可以使用api中已有的任何数量的过滤方法来管理它