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.

Foi útil?

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();
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top