2011-12-11 49 views
1

我有一个情况,我有两个对象数组。我想从两个数组中选择相同的对象并显示它。如何使用jQuery在两个数组中选择相同的对象?

<ul> 
<li id="one" class="color pro">one</li> 
<li id="two" class="color pro">two</li> 
<li id="three" class="color">three</li> 
<li id="four" class="color">four</li> 
</ul> 

我使用下面的脚本来显示相同​​的对象:比如我有以下UL(You can see it at jsFiddle)。

var activeElementsColors = $("ul li.color"); 
var activeElementsPro = $("ul li.pro");        

var activeElements = activeElementsPro.filter(function(el) { 
return $.inArray(el, activeElementsColors) > -1; 
}); 

activeElements.show(); 

我知道我可以使用$(“li.color.pro”)。show()但上面的一个仅仅是一个例子。真正的代码比这复杂。

+0

的'$(” ul li.color“)'已经可以让你将两个组合。 –

回答

2
var activeElementsColors = $("ul li.color"); 
var activeElementsPro = $("ul li.pro");        

var activeElements = activeElementsPro.filter(function(el,e) { 

    return $.inArray(e, activeElementsColors) > -1; 
}); 
console.log(activeElements); 
activeElements.show(); 

http://jsfiddle.net/StPew/8/

+0

我想知道哪一个更有效率。你的或pimvdb的?顺便说一句,这两个工作正常我); – Imran

+0

也如果我有更多的组例如:activeElementsColors, activeElementsPro,activeElementsType,activeElementsSize等? – Imran

+0

我没有jQuery资源(我怀疑我可以读取它们),但是我怀疑pimvdb实际上更高效,因为它跳过了一个解引用,你通常不会在过载的情况下天真地编程API。将它简化为一千次,回归一些数字? – buddhabrot

2

函数中传递给.filter的第一个参数是jQuery对象中元素的索引,而不是元素本身。改为使用this,它的确引用了元素:http://jsfiddle.net/StPew/7/

var activeElements = activeElementsPro.filter(function() { 
    return $.inArray(this, activeElementsColors) > -1; 
}); 

docs

function(index)

用作用于组中的每个元件的测试的功能。 this是当前的DOM元素。

+0

我想知道哪一个更有效率。你的或3nigma的?顺便说一句,这两个工作对我很好;) – Imran

+0

我会离开解释到@ pimvdb':)' – Rafay

+0

@Imran:我不认为有任何性能差异。 – pimvdb

1

参数到filter回调是当前元素的索引。改为使用this

return $.inArray(this, activeElementsColors) > -1; 

这就是说你在做什么似乎严重错误。假设你真正想要的是.pro.color选择交集,那么你可以简单地做

$(".pro:.color").show(); 

fiddle

1

.filter()需要一个jQuery对象作为参数,并返回一个新的对象,包括在元素第一个对象减去那些不属于第二jQuery对象,所以如果你已经拥有jQuery的对象,你可以使用它们像这样以表明是两个对象:

var activeElementsColors = $("ul li.color"); 
var activeElementsPro = $("ul li.pro"); 
activeElementsPro.filter(activeElementsColors).show(); 
相关问题