Domanda

Ho due serie di elementi con (a volte) corrispondenti attributi rel e id:

<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"/>

Voglio che venga visualizzato un elemento <a> quando un <p> con un ID corrispondente viene caricato tramite una richiesta .get().

Ho pensato di usare filter (), ma non riesco a farlo funzionare. Ho provato

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

Questo sembra funzionare sul primo elemento, ma la mia comprensione di filter () è che dovrebbe passare attraverso l'intero elenco. Grazie.

È stato utile?

Soluzione

Prova questo:

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

Non sono davvero sicuro dell'uso di filter per quello che stai cercando di fare, forse qualcun altro può far luce su questo?

Altri suggerimenti

$('p').attr('id') restituirà sempre e solo l'ID del primo elemento corrispondente. Quindi la tua funzione di filtro tornerà sempre vera se l'ancoraggio ha lo stesso attributo rel del primo paragrafo trovato da jQuery. Quindi hai ragione, in quanto filter passerà attraverso ogni punto di ancoraggio, ma non attraverserai tutti i paragrafi.

Quando il paragrafo viene caricato, si conosce il suo ID. Pertanto, puoi semplicemente farlo:

$('a[rel='+paragraphID+']').show();
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top