2010-05-05 6 views
1

J'ai un div qui contient de nombreuses travées et chacune de ces travées contient un seul href.filtre de nuage de tags

Fondamentalement, c'est un nuage de tags. Ce que je voudrais faire est d'avoir une zone de texte qui filtre le nuage de tag sur l'événement KeyUp.

Des idées ou est-ce possible?

Question mise à jour: Quelle serait la meilleure façon de réinitialiser la liste pour recommencer la recherche?

Répondre

3

Fondamentalement, ce que vous voulez faire est quelque chose comme ça

$('#myTextbox').keyup(function() { 
    $('#divCloud > span').not('span:contains(' + $(this).val() + ')').hide(); 
}); 
+0

+1. Changez $ (this) .val() 'en' this.value', s'il vous plait. –

+0

@David Murdoch: cela ne peut être fait en toute sécurité que dans la mesure où tous les navigateurs fonctionnent de la même manière (le fait que tous les navigateurs principaux le font est accessoire, et n'est pas garanti de rester comme ça). la route via jquery assure la compatibilité cross-browser, ce qui est vraiment le plus grand avantage d'utiliser un framework javascript. –

+0

um, quoi? 'this.value' sur ' retournera _always_ la propriété/l'attribut 'value' de l'entrée ou une chaîne vide (' "" '). –

0

Cela peut sans doute être amélioré et allégé mais cela donne au moins la fonctionnalité de pouvoir masquer plusieurs étiquettes par seperating votre entrée par des virgules. Par exemple: entering this, that, something dans l'entrée masquera chacune de ces plages.

Demo HTML:

<div id="tag_cloud"> 
    <span>this</span> 
    <span>that</span> 
    <span>another</span> 
    <span>something</span> 
    <span>random</span> 
</div> 

<input type="text" id="filter" /> 

Demo jQuery:

function oc(a){ 
    var o = {}; 
    for(var i=0;i<a.length;i++){ 
     o[a[i]]=''; 
    } 

    return o; 
} 

$(function(){ 
    $('#filter').keyup(function(){ 
     var a = this.value.replace(/ /g,'').split(','); 

     $('#tag_cloud span').each(function(){ 
      if($(this).text() in oc(a)){ 
       $(this).hide(); 
      } 
      else { 
       $(this).show(); 
      } 
     }) 
    }) 
}) 
Questions connexes