如何获取:contains()选择器的总实例使用DIV中具有多个匹配的数组?

时间:2014-08-22 08:31:04

标签: javascript jquery arrays

这是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实例中是否有多个匹配(或重复)?

2 个答案:

答案 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)

Demo