假设我在页面上有产品链接,某些产品在推荐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>
我需要为推荐和非推荐的网址构建唯一的pid列表,如下所示:
recommended_pids = ["uvw","xyz"];
non_recommened_pids = ["abc","def"];
我知道我可以在这样的页面上git列出所有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);
});
我可以使用这样的选择器在页面上获取推荐的pid列表:
$('div.recommended a[href*="pid="]')
对每个数组进行排序和uniq,然后减去所有元素,然后进行数组减法,得到非推荐的pid列表。
但有没有办法使用其他jQuery过滤器来获取未包含在推荐div中的pid列表而无需编写数组减法函数?
答案 0 :(得分:2)
嗯,总是.filter()
:
var $pidLinks = $('a[href*="pid="]');
// recommended links
$pidLinks.filter('div.recommendations > a');
// non-recommended links
$pidLinks.filter(':not(div.recommendations > a)');
对于它的价值,@ Jayendra的解决方案更简单,可能更好,除非你需要获得两个列表 - 在这种情况下我相信使用.filter()
应该有更好的性能如果你缓存所有链接的原始选择。
答案 1 :(得分:2)
请勿使用
$("a:not(.recommendations a)").each(function(index){
alert(this.id);
});
答案 2 :(得分:1)
在每个功能中,你可以这样做:
if( $(this).parents(".recommendations").length ) {
recommended_pids.push(pid);
} else {
non_recommened_pids.push(pid);
}