2011-08-18 45 views
0

我確定答案存在於某處,但我對於搜索的術語感到迷茫。所以如果這是重複的道歉。Jquery相交選擇器

在jQuery/JS中,從下面的HTML中選擇「相交」元素有沒有簡單的方法?

<div id="first"> 
    <div id="source-AAA"/> 
    <div id="source-CCC"/> 
    <div id="source-EEE"/> 
    <div id="source-FFF"/> 
</div> 
<div id="second"> 
    <div id="BBB"/> 
    <div id="CCC"/> 
    <div id="DDD"/> 
    <div id="FFF"/> 
</div> 

即獲得元素#CCCdiv#second#FFF的保持,基於這樣的事實,這兩個ID在#first

我想正確的答案是做服務器端的相交(這可能,但很痛苦,因爲兩個數據集來自不同的組件),但我想我會檢查以防有人知道一個完美的方式來做到這一點在jQuery中?

回答

2

你首先必須收集所有這些ID,然後相應地建立一個CSS選擇器字符串:

var divsToSelect = []; 

$('#first div').each(function(){ 
    divsToSelect.push($(this).attr('id').substr(-3)); 
}); 

$('#' + divsToSelect.join(',#')); 

http://jsfiddle.net/TXqw3/

+1

聰明 - 我喜歡在第二行加入。謝謝! – jlb83

+0

如果有人感興趣,我稍微調整了一下例子,因爲它沒有起作用。儘管同樣的原因。 http://jsfiddle.net/udrHk/ – jlb83

1

你可以使用過濾器 -

$("#second div").filter(function() { 
    return $("#first > div[id$=" + this.id + "]").length > 0 
}) 

演示 -​​

+0

這將貫穿DOM過多次(第二組每隔一格)。 –

+0

'$(「#first div」)。filter(function(){return $(「#」+ this.id.split(' - ')[1])。length;});' – Tomalak

+0

不會解決方案貫穿第一組中的每個div?你顯然需要考慮任何選擇的解決方案的速度,考慮你想比較的div的數量等。 – ipr101

0

爲什麼不客戶IDE?

$('div#first > div').each(function(){ 
     var fv = $(this).attr('id'); 
     $('div#second > div').each(function(){ 
     var sv = $('div').attr('id'); 
     if (fv.indexOf(sv) > -1){ 
      // do something 
     } 
     }); 
    }); 

當然,我不是專家,但沿線的東西。