Pergunta
Eu tenho dois conjuntos de elementos com (às vezes) rel e id atributos correspondentes:
<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"/>
Eu quero um elemento <a>
a aparecer quando um <p>
com uma ID correspondente é carregado através de uma solicitação .get()
.
Pensei em usar filtro (), mas não pode fazê-lo funcionar. Tentei
$('a').filter(function() {
return $(this).attr('rel') == $('p').attr('id');
}).show();
Isso parece funcionar no primeiro elemento, mas o meu entendimento de filtro () é que ele deve passar por toda a lista. Obrigado.
Solução
Tente isto:
$('a').each(function() {
var $anchor = $(this);
$('p').each(function() {
if($(this).attr('id') == $anchor.attr('rel')) {
$anchor.show();
}
});
});
Estou realmente não tem certeza sobre o uso de filter
para o que você está tentando fazer, talvez alguém pode lançar alguma luz sobre isso?
Outras dicas
$('p').attr('id')
só vai retornar o ID do primeiro elemento combinado. Portanto, sua função de filtro só vai retornar true se a âncora tem o mesmo atributo rel
como o primeiro parágrafo encontrado por jQuery. Então, você está certo, em que filter
vai passar por cada âncora, mas você não está indo através de cada parágrafo.
Quando o parágrafo é carregado, você sabe o seu ID. Portanto, você pode simplesmente fazer isso:
$('a[rel='+paragraphID+']').show();