2009-06-23 7 views
1

Je suis assez nouveau pour jQuery, donc s'il vous plaît pardonnez ... J'ai une page avec une longue liste de liens hypertextes dans une liste non numérotée:index alphabétique jQuery

<div class="longlist"> 
<ul> 
<li><a href="/firstitem.aspx" title="First Item">First Item</a></li> 
<li><a href="/seconditem.aspx" title="Second Item">Second Item</a></li> 
... 
<li><a href="/lastitem.aspx" title="Last Item">Last Item</a></li> 
</ul> 
</div> 

En haut de cette page est une liste de liens hypertextes pour les lettres de l'alphabet

<div class="alphabet"> 
<a href="#" title="A">A</a> 
<a href="#" title="B">B</a> 
<a href="#" title="C">C</a> 
... 
<a href="#" title="Z">Z</a> 
<a href="#" title="All">ALL</a> 
</div> 

Lorsqu'un utilisateur clique sur un des liens dans l'index alphabétique, je dois montrer seulement des articles dans la longue liste qui commencent par la lettre sélectionnée. J'ai également besoin de «griser» les liens alphabétiques s'il n'y a aucun élément correspondant à cette lettre dans la longue liste (de cette façon, l'utilisateur ne prendra pas la peine de cliquer sur un index qui n'existe pas).

Comment puis-je faire cela en utilisant jQuery?

+0

L'exigence est de cacher le reste des liens et de montrer que seuls les candidats sélectionnés. –

Répondre

5
$(document).ready(function(){. 

    $(".alphabet a").each(function(i){ 
     if ($(".longlist ul li a[title^="+$(this).text()+"]").length < 1){ 
      $(this).hide(); 
     } 
    }); 

    $(".alphabet a").click(function(){ 
     var letter = $(this).text(); 
     if (letter == 'ALL'){ 
      $(".longlist ul li").show(); 
      return; 
     } 

     $(".longlist ul li").hide(); 
     $(".longlist ul li a[title^="+letter+"]").parent().show(); 

    });  
}); 

semble fonctionner pour moi :)

+0

ooh, ne savait pas sur les sélecteurs [attribut^=] – Jimmy

+0

Merci lvtrii, qui a l'air très élégant! que diriez-vous du peu pour désactiver les liens alphabétiques? –

+0

Ah désolé, n'a pas vu ce peu. Vous devez ajouter: $ ("alphabet a. ") Chaque fonction ((i) { \t \t \t if ($ (" longlist ul li un [titre^=." + $ (This).. . texte() + "]") longueur <1) { \t \t \t \t $ (this) .hide(); \t \t \t} \t \t}); – mheap

4
$('myLetterList a').click(function(){ 
    var letter = $(this).attr('title'); 
    $('ul li').each(function(){ 
     var t = $(this).attr('title'); 
     if(letter != t.substring(0,1)){ 
      $(this).hide(); 
     } 
    }); 
}); 

Je suis sûr qu'il ya un moyen plus jQuery-ish de le faire (en particulier le bit .each()), mais cela ne devrait vous permettre de vous rapprocher de l'endroit où vous voulez être.

+0

Je pense que je comprends ce que vous faites ici. Je vais probablement devoir montrer d'abord tous les objets puis cacher ceux qui ne correspondent pas ... ou l'inverse? –

+0

Correct - ce code suppose que tous les éléments sont visibles et masquer ceux qui ne commencent pas par la lettre cliquée. Vous pouvez également ajouter un autre bit qui montre tout (si cela correspond à votre conception, bien sûr). – inkedmn

Questions connexes