我有代码在您搜索输入框时发送ajax
请求。然后我还想根据点击的某些<div>
向我的网络服务器发送过滤器。该代码段看起来像这样(没有ajax请求)
$('.selector').on('click', function(e) {
$(this).toggleClass('active');
$('.selector.active').each(function() {
console.log($(this).parents()[1]);
});
});
.filter .label {
padding: 4px 8px;
background-color: #707070;
}
.filter .content {
max-width: 96px;
max-height: 0px;
margin: 0px 10px 0px 6px;
background-color: #808080;
overflow: hidden;
display: flex;
flex-wrap: wrap;
}
.filter:hover .content {
max-height: 256px;
}
.content .selector {
background-color: #369;
padding: 8px 4px;
text-align: center;
flex-grow: 1;
display: inline-block;
cursor: pointer;
box-sizing: border-box;
transition: .1s !important;
}
.content .selector:hover {
background-color: white;
color: #369;
}
.content .active {
background-color: lightgrey;
color: #369;
}
.content .active:hover {
background-color: lightgrey;
color: black;
}
.filter .bar {
height: 8px;
width: 100%;
background-color: #808080;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="temps" class="filter">
<div class="label">
<span>The Temps:</span>
</div>
<div class="content">
<div class="selector">Temp1</div>
<div class="selector">Temp2</div>
</div>
<div class="bar"></div>
</div>
<div id="others" class="filter">
<div class="label">
<span>The Temps:</span>
</div>
<div class="content">
<div class="selector">Other1</div>
<div class="selector">Other2</div>
</div>
<div class="bar"></div>
</div>
返回的内容是:每次点击其中一个.selector
时,log
所有.selector
s都有.active
个 - 它会记录.selector
两个等级的父母(.filter
)。
我正在尝试弄清楚如何仅获取过滤器的每个#id
的一个实例,即如果两个temps selectors
都是active
,它会记录:
<div id="temps" class="filter">
<div id="temps" class="filter">
我只想让它发送一个 - 我想或多或少地获得“独特价值”(使用一些SQL术语)
谢谢你。答案 0 :(得分:3)
将每个项目推送到一个数组,然后使用$.unique()
仅将唯一项目记录到控制台:
var arr = [];
$('.selector').on('click', function(e) {
$(this).toggleClass('active');
$('.selector.active').each(function() {
arr.push($(this).parents()[1]);
});
console.log($.unique(arr));
});
&#13;
.filter .label {
padding: 4px 8px;
background-color: #707070;
}
.filter .content {
max-width: 96px;
max-height: 0px;
margin: 0px 10px 0px 6px;
background-color: #808080;
overflow: hidden;
display: flex;
flex-wrap: wrap;
}
.filter:hover .content {
max-height: 256px;
}
.content .selector {
background-color: #369;
padding: 8px 4px;
text-align: center;
flex-grow: 1;
display: inline-block;
cursor: pointer;
box-sizing: border-box;
transition: .1s !important;
}
.content .selector:hover {
background-color: white;
color: #369;
}
.content .active {
background-color: lightgrey;
color: #369;
}
.content .active:hover {
background-color: lightgrey;
color: black;
}
.filter .bar {
height: 8px;
width: 100%;
background-color: #808080;
}
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="temps" class="filter">
<div class="label">
<span>The Temps:</span>
</div>
<div class="content">
<div class="selector">Temp1</div>
<div class="selector">Temp2</div>
</div>
<div class="bar"></div>
</div>
<div id="others" class="filter">
<div class="label">
<span>The Temps:</span>
</div>
<div class="content">
<div class="selector">Other1</div>
<div class="selector">Other2</div>
</div>
<div class="bar"></div>
</div>
&#13;
编辑从jQuery 3.0开始,$.uniqueSort()
是要使用的方法。
从jQuery 3.0开始,不推荐使用此方法,只是jQuery.uniqueSort()的别名。请改用该方法。
在上面的示例中,包含了jQuery 2.1.1,因此使用$.unique()
,因为$.uniqueSort()
不是函数。
答案 1 :(得分:2)
您可以使用JQuery内置的.unique()
方法。
答案 2 :(得分:2)
在使用$.grep()
,.is()
var log = [];
$('.selector').on('click', function(e) {
$(this).toggleClass('active');
$('.selector.active').each(function(i, elem) {
if (!$.grep(log, function(el) {
return $(el).is($(elem).closest(".filter")[0])
}).length) {
log.push($(this).closest(".filter")[0])
}
});
console.log(log);
});
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js">
</script>
<div id="temps" class="filter">
<div class="label">
<span>The Temps:</span>
</div>
<div class="content">
<div class="selector">Temp1</div>
<div class="selector">Temp2</div>
</div>
<div class="bar"></div>
</div>
<div id="others" class="filter">
<div class="label">
<span>The Temps:</span>
</div>
<div class="content">
<div class="selector">Other1</div>
<div class="selector">Other2</div>
</div>
<div class="bar"></div>
</div>
&#13;
在使用Array.prototype.indexOf()
var log = [];
$('.selector').on('click', function(e) {
$(this).toggleClass('active');
$('.selector.active').each(function() {
if (log.indexOf($(this).closest(".filter")[0]) === -1) {
log.push($(this).closest(".filter")[0])
}
});
console.log(log);
});
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js">
</script>
<div id="temps" class="filter">
<div class="label">
<span>The Temps:</span>
</div>
<div class="content">
<div class="selector">Temp1</div>
<div class="selector">Temp2</div>
</div>
<div class="bar"></div>
</div>
<div id="others" class="filter">
<div class="label">
<span>The Temps:</span>
</div>
<div class="content">
<div class="selector">Other1</div>
<div class="selector">Other2</div>
</div>
<div class="bar"></div>
</div>
&#13;