2009-09-10 8 views
1

I possèdent deux ensembles d'éléments avec (parfois) correspondant attributs rel et id:filtre de comparaison jQuery

<a rel="1" style="display:none"/> 
<a rel="2" style="display:none"/> 
<a rel="3" style="display:none"/> 
and 
<p id="1"/> 
<p id="3"/> 
<p id="chocolate"/> 

Je veux un élément <a> apparaisse quand un <p> avec un ID correspondant est chargé par l'intermédiaire d'une requête .get(). J'ai pensé que j'utiliser filter(), mais je n'arrive pas à le faire fonctionner. J'ai essayé

$('a').filter(function() { 
    return $(this).attr('rel') == $('p').attr('id'); 
    }).show(); 

Cela semble fonctionner sur le premier élément, mais ma compréhension du filtre() est qu'il doit passer par toute la liste. Merci.

Répondre

1

Essayez ceci:

$('a').each(function() { 
    var $anchor = $(this); 
    $('p').each(function() { 
     if($(this).attr('id') == $anchor.attr('rel')) { 
      $anchor.show(); 
     } 
    }); 
}); 

Je ne suis vraiment pas sûr de l'utilisation de filter pour ce que vous essayez de faire, peut-être quelqu'un d'autre peut faire la lumière à ce sujet?

+0

'filter' fonctionnera mais il doit vérifier plus que le premier élément de paragraphe. – geowa4

+0

Merci, cela a parfaitement fonctionné. J'aime la suggestion de geowa4, mais je dois encore vérifier pour voir s'il y a un ID correspondant. Je ne peux pas garantir qu'un élément chargé correspondra à l'élément que je veux montrer. Merci encore! – andyashton

0

$('p').attr('id') ne retournera jamais que l'ID du premier élément correspondant. Ainsi, votre fonction de filtrage ne retournera vrai que si l'ancre a le même attribut rel que le premier paragraphe trouvé par jQuery. Donc, vous avez raison, en ce que filter passera par chaque ancre, mais vous ne parcourez pas tous les paragraphes.

Lorsque le paragraphe est chargé, vous connaissez son ID. Par conséquent, vous pouvez simplement faire ceci:

$('a[rel='+paragraphID+']').show();