这是How to get the total instance of the :contains() Selector
的后续查询我在使用contains:selector ...
获取总匹配时遇到此数组循环问题以下是我的变量 -
var filterarray = ["Content1", "goes"];
<div id="content" style="display:none">Content1 goes here</div>
<div id="content" style="display:none">Content1 goes here too</div>
<div id="content" style="display:none">Content1 goes here again</div>
<div id="content" style="display:none">extra node</div>
这是我的剧本 -
totalSum = 0;
for (i=0;i<filterarray.length;i++){
$( "div[id^=content]:contains('"+ filterarray[i] +"')").css( "display", "block" );
totalSum += $( "div[id^=content]:contains('"+ filterarray[i] +"')").length;
}
$("#results").append("Total Results: " +totalSum);
结果显示= 6,其中它应该只是3,因为div已经处于“阻塞”状态。我认为计数是针对每个“Content1”= 3而“go”= 3,总共6个。
问题:有没有办法只显示3并忽略DIV实例中是否有多个匹配(或重复)?
答案 0 :(得分:1)
这可能会对您有所帮助:http://api.jquery.com/jquery.unique/
http://jsfiddle.net/xb14h1ev/1/
HTML:
<div class="content" style="display:none">Content1 goes here</div>
<div class="content" style="display:none">Content1 goes here too</div>
<div class="content" style="display:none">Content1 goes here again</div>
<div class="content" style="display:none">extra node</div>
<div id="results"></div>
JS:
var filterarray = ["Content1", "goes"];
$(function(){
totalSum = 0;
var divs = [];
for (i=0;i<filterarray.length;i++){
$( "div.content:contains('"+ filterarray[i] +"')").css( "display", "block" );
$.merge(divs, $( "div.content:contains('"+ filterarray[i] +"')"));
}
totalSum = $.unique(divs).length;
$("#results").append("Total Results: " +totalSum);
});
答案 1 :(得分:1)
第一个建议使用类而不是ID!因为id表示 UNICAL IDENTIFICATOR 。阅读note。
假设您有下一个html节点
<div class="content" style="display:none">Content1 goes here</div>
<div class="content" style="display:none">Content1 goes here too</div>
<div class="content" style="display:none">Content1 goes here again</div>
<div class="content" style="display:none">extra node</div>
使用内容类迭代所有节点。
var nodes = $(".content");
var filterarray = ["Content1", "goes"];
var total = 0;
for(var i = 0; i < nodes.length; i++){
var current = $(nodes[i]);
var text = current.text();
var res = filterarray.reduce(function(p, a){
return p && (text.indexOf(a) != -1);
}, true);
if(res) total++;
}
console.log(total)