假设我有这个无序列表和隐藏列表项。{在jsFiddle}
<ul>
<li class="brand pro size color">one</li>
<li class="brand pro color">two</li>
<li class="brand pro size color">three</li>
<li class="pro size color">four</li>
<li class="brand pro size color">five</li>
<li class="pro color">six</li>
<li class="brand pro size color">seven</li>
<li class="brand pro size color">eight</li>
<li class="brand size color">nine</li>
<li class="brand pro color">ten</li>
</ul>
我有四个数组:
var myBrand = $("ul li.brand");
var myPro = $("ul li.pro");
var mySize = $("ul li.size");
var myColor = $("ul li.color");
我想在一个名为mySelected的新数组中有"相同的对象"。
我已经对两个数组这样做了:
var mySelected = myBrand.filter(function() {
return $.inArray(this, myPro) > -1;
});
mySelected.show();
我想知道如何为"四个"或更多数组?
您必须遍历它们。使用EcmaScript 5的every
,您可以:
var mySelected = myBrand.filter(function() {
var li = this;
return [myPro, mySize, myColor].every( function(array) {
return $.inArray(li, array) > -1;
});
});
编辑:根据jQuery的api, filter方法也接受jQuery set作为参数。所以下面的代码应该也能正常工作:
var mySelected = myBrand;
var setsToBeMatched = [myPro, mySize, myColor];
for (var i=0; i<setsToBeMatched.length; i++)
mySelected = mySelected.filter(setsToBeMatched[i]);
如果您想选择所有具有所有四个类的<li>
元素,那么您只需使用选择器并立即选择它们:
var mySelected = $('ul li.brand.pro.size.color');
下面是一个演示:http://jsfiddle.net/btk7r/1/
如果你有一个类数组,这可以更动态:
var class_arr = ['brand', 'pro', 'size', 'color', 'length', 'width'],
mySelected = $('ul li.' + class_arr.join('.'));