2010-09-07 14 views
1

J'ai quelques couches qui sont dynamiquement mises en comme suitcacher en double div dans jquery

<div><p class="locid">2<p></div> 
<div><p class="locid">1<p></div> 
<div><p class="locid">2<p></div> 
<div><p class="locid">3<p></div> 
<div><p class="locid">4<p></div> 

Ce que je dois faire est de cacher la deuxième occurrence de cette couche de sorte qu'il apparaît comme suit

<div><p class="locid">2<p></div> 
<div><p class="locid">1<p></div> 
<div><p class="locid">3<p></div> 
<div><p class="locid">4<p></div> 

Des idées?

Merci

Jamie

Répondre

1
// get a collection of p's matching some value 
$("p.locid").filter(function() { 
    return $(this).text() == '2'; 

// hide the (div) parent of the second match 
}).eq(1).parent().hide(); 

Démo: http://jsfiddle.net/WjgxQ/

+0

Celui-ci ne fonctionne que si le contenu est littéralement "2". Je ne pense pas que ce soit la question. –

+0

Ma compréhension est la suivante: 'donné une certaine valeur, je veux cacher la div qui correspond à la deuxième occurrence de cette valeur'. – karim79

+0

Même. Dans ce cas, je ne comprends pas votre script: P –

0

Essayez ceci:

var arr = new array(); 

$('.locid').each(function(){ 
    if ($.inArray($(this).text(), arr) !== -1){ 
    $(this).closest('div').remove(); 
    } 
    else{ 
    arr[] = $(this).text(); 
    } 
}); 
1

Jetez un oeil à:

http://api.jquery.com/jQuery.unique/

Ce fait exactement ce que vous cherchez;)

+0

Ce n'est pas vraiment ce que jQuery.unique() 'fait. Il supprime seulement les doublons s'ils sont le même élément réel. Donc, si vous avez deux éléments qui ont le même contenu, la même classe, etc., ils semblent être identiques, ils sont en fait considérés comme deux éléments uniques parce qu'ils ne sont pas le même élément. Ils ont juste la même apparence. En tant que tel, 'jQuery.unique()' ne supprimerait aucun des deux. : o) – user113716

+0

whoops ... vous avez raison .. ne fonctionnera pas dans ce cas. – sled

1

Intéressant. Essaye ça.

var a = new Array(); 
$('p.locid').each(function(){ 
    text = $(this).text(); 
    if($.inArray(text, a)){ 
     $(this).closest('div').hide(); 
    }else{ 
     a.push(text); 
    } 
}); 
0

Cela fonctionne:

var a = new Array(); 

$('p').each(function(index) { 
    text = $(this).text(); 
    if($.inArray(text, a)!=-1){ 
     $(this).closest('p').hide(); 
    }else{ 
     a.push(text); 
    } 
}); 

http://jsfiddle.net/WjgxQ/59/