0

ページに製品リンクがあり、一部の製品は推奨 div 内にあるとします。

<a href="some_url?pid=abc"><img src ... ></a>
<a href="some_url?pid=abc">ABC Product Name...</a>

<a href="some_url?pid=def">
 .... more product links

<div class="recommendations">
  <a href="some_url?pid=uvw"> ...
  <a href="some_url?pid=xyz"> ...
</div>

次のように、推奨される URL と推奨されない URL の pid の一意のリストを作成する必要があります。

 recommended_pids = ["uvw","xyz"];
 non_recommened_pids = ["abc","def"];

次のようなページのすべての pid のリストを git できることはわかっています。

 $('a[href*="pid="]').each(function() {
   //get just the pid part
   var link = this.href;
   var pid = link.split('pid=')[1].split('&')[0];
   pids.push(pid);
 });

そして、次のようなセレクターを使用して、ページで推奨される pid のリストを取得できます。

$('div.recommended a[href*="pid="]')

各配列を並べ替えて一意にし、すべての要素を減算してから、配列の減算を実行して、推奨されない pid のリストを取得します。

しかし、他の jQuery フィルターを使用して、配列減算関数を作成することなく、推奨される div に含まれていない pid のリストを取得する方法はありますか?

4

3 に答える 3

2

まあ、常にあります.filter()

var $pidLinks = $('a[href*="pid="]');
// recommended links
$pidLinks.filter('div.recommendations > a');
// non-recommended links
$pidLinks.filter(':not(div.recommendations > a)');

やや無償のjsFiddle

価値があるのは、両方のリストを取得する必要がない限り、@ Jayendraのソリューションはより単純で、おそらくより優れていること.filter()です。その場合、すべてのリンクの元の選択をキャッシュすると、使用する方がパフォーマンスが向上すると思います。

于 2011-09-26T18:01:07.597 に答える
2

使用しない

$("a:not(.recommendations a)").each(function(index){
    alert(this.id);
});
于 2011-09-26T18:12:07.150 に答える
1

各関数内でこれを行うことができます:

if( $(this).parents(".recommendations").length ) {

    recommended_pids.push(pid);

} else {

    non_recommened_pids.push(pid);

}
于 2011-09-26T18:01:39.227 に答える