我想将数组作为参数发送到eq
函数。像那样:
$(this).find('tr').not(':eq(array)').each(function(){
});
我使用循环和eval
函数完成了这项操作,但它看起来并不容易编辑。这是我的代码。
$.fn.grilestir = function(options){
var nots = '';
for(var i=0;i<options.row_numbers.length;i++){
nots += "not(':eq("+options.row_numbers[i]+")').";
}
eval("$(this).find('tr')."+nots+"each(function(){\
var tr = $(this); var orj;\
if(options.mod == 'passive-rows'){\
$(this).mouseover(function(){\
orj = tr.css('backgroundColor');\
tr.css('backgroundColor', '#777777');\
});\
$(this).mouseout(function(){\
tr.css('backgroundColor', orj); \
});\
}\
});");
}
有没有办法做到这一点?
答案 0 :(得分:4)
我假设您的数组包含一组表示元素索引的数字。 eq
选择器无效。
您可以使用filter
将匹配的元素集减少到数组中索引的元素集:
var arr = [1, 2];
$("someSelector").filter(function(index) {
return arr.indexOf(index) > -1;
});
请注意使用Array.prototype.indexOf
,这在旧浏览器中不可用(着名的IE&lt;版本9)。但是,有很多垫片可以解决这个问题。 或,如评论中所述(感谢@mcgrailm),您可以使用jQuery.inArray
:
var arr = [1, 2];
$("someSelector").filter(function(index) {
return $.inArray(index, arr) > -1;
});