jquery 排除数组元素
jquery exclude array elements
我有一个元素数组,我想有效地维护它,随着时间的推移添加和删除元素数组。
var myElements = $('.initial');
jquery 的 merge() 似乎非常适合添加项目,因为它不会创建新数组而只是添加到现有数组:
$.merge(myElements, $('.to-add'));
是否有删除的等效项,它也可以就地修改数组?类似于:
$.exclude(myElements, $('.to-remove'));
我确实有 DOM 个元素的数组,选择器只是用作示例。
使用jquerynot
方法,
var filtered = $(myElements).not($('.to-remove'));
您可以使用 delete
从数组中删除一个元素,然后使用 $.grep
删除空的 space。
//[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);
您正在使用专用于数组文字的方法。 jQuery 已经有方法 add()
,它将 return 修改后的 jQuery 对象,其中包含与选择器
匹配的元素
var myElements = $('.initial');
var newCollection = myElements.add('.to-add');
newCollection.not('.to-remove').doSomething();
不要将 jQuery 对象视为数组,尽管它们 类似于 的数组。
引用add()
不清楚您的整体 objective 到底是什么,但很可能您可以使用 api
中已经存在的任意数量的过滤方法来管理它
假设你在寻找 a 中 b 的相对补码。
而且您不想在处理过程中创建其他对象。
该函数适用于普通数组和 jQuery 集。
(因此使用 $.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'));
我有一个元素数组,我想有效地维护它,随着时间的推移添加和删除元素数组。
var myElements = $('.initial');
jquery 的 merge() 似乎非常适合添加项目,因为它不会创建新数组而只是添加到现有数组:
$.merge(myElements, $('.to-add'));
是否有删除的等效项,它也可以就地修改数组?类似于:
$.exclude(myElements, $('.to-remove'));
我确实有 DOM 个元素的数组,选择器只是用作示例。
使用jquerynot
方法,
var filtered = $(myElements).not($('.to-remove'));
您可以使用 delete
从数组中删除一个元素,然后使用 $.grep
删除空的 space。
//[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);
您正在使用专用于数组文字的方法。 jQuery 已经有方法 add()
,它将 return 修改后的 jQuery 对象,其中包含与选择器
var myElements = $('.initial');
var newCollection = myElements.add('.to-add');
newCollection.not('.to-remove').doSomething();
不要将 jQuery 对象视为数组,尽管它们 类似于 的数组。
引用add()
不清楚您的整体 objective 到底是什么,但很可能您可以使用 api
中已经存在的任意数量的过滤方法来管理它假设你在寻找 a 中 b 的相对补码。 而且您不想在处理过程中创建其他对象。 该函数适用于普通数组和 jQuery 集。 (因此使用 $.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'));