Как jQuery выбрать все ссылки на странице, которые НЕ содержатся в определенном div - PullRequest
0 голосов
/ 26 сентября 2011

Предположим, у меня есть ссылки на продукты на странице, некоторые продукты находятся в пределах рекомендованного раздела:

<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>

Мне нужно составить уникальный список pids для рекомендованных и нерекомендованных URL, например:

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

Я знаю, что могу просмотреть список всех pid на странице следующим образом:

 $('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);
 });

И я могу получить список рекомендуемых pids на странице с помощью селектора, подобного этому:

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

Сортируйте и удаляйте каждый массив, затем вычитайте все элементы, затем вычитайте массив, чтобы получить список нерекомендованных pids.

Но есть ли способ использовать другие фильтры jQuery для получения спискаpids НЕ содержится в рекомендованном div без обращения к написанию функции вычитания массива?

Ответы [ 3 ]

2 голосов
/ 26 сентября 2011

Не используйте

$("a:not(.recommendations a)").each(function(index){
    alert(this.id);
});
2 голосов
/ 26 сентября 2011

Ну, всегда есть .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() должно иметь лучшую производительность, если вы кешируете оригинал выбор всех ссылок.

1 голос
/ 26 сентября 2011

Внутри каждой функции вы можете сделать это:

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

    recommended_pids.push(pid);

} else {

    non_recommened_pids.push(pid);

}
...