2011-09-28 19 views
11

Sei stato su questo per un po 'ora. Fondamentalmente, ho bisogno di verificare dove un href su un tag di ancoraggio con la classe .pdf-download è vuoto, e se lo è, nasconderlo.JQuery: nascondi l'ancora se href è vuoto

Ho provato alcune opzioni ma senza fortuna. Questo è quello che ho finora:

$("a.pdf-download").each(function (i) { 
    if ($('[href]:empty',this).length == 1) { 
    $(this).hide(); 
    } else { 
    $(this).show(); 
    } 
}); 
+3

Hi Guy - Vedo che avete chiesto tre domande e ha ricevuto alcune buone risposte. Assicurati di contrassegnare una risposta come corretta spuntando il segno di spunta accanto alla risposta migliore. È così che funziona la comunità SO. Puoi anche leggere le domande frequenti - http://stackoverflow.com/faq – mrtsherman

risposta

19
if ($(this).attr('href') != '') { 
    $(this).hide(); 
} else { 
    $(this).show(); 
} 

Si noti che è anche possibile fare questo in css con attribute selectors:

a.pdf-download[href='']{ 
    display:none; 
} 

Questo non è supportata in IE6 però.

+5

+1 - Mi piace la soluzione CSS. Puoi usare lo stesso selettore in jQuery se lo vuoi anche tu. '$ ('a [href =" "]'). hide();' – mrtsherman

+0

Si noti che il selettore jQuery non nasconderà un tag link senza alcun attributo href. –

3

Qualcosa come questo funziona?

$("a.pdf-download").each(function (i) { 
    if ($(this).attr('href').length == 0) { 
    $(this).hide(); 
    } else { 
    $(this).show(); 
    } 
}); 
+0

Funziona se href è impostato sull'elemento, ma in caso contrario verrà generato un errore. Se si prova '$ (' test') .attr ('href'). Length' restituirà" TypeError: Impossibile leggere la proprietà 'length' di undefined "come' .attr ('href') 'restituisce' undefined '. Immagino che nella maggior parte dei casi questo metodo funzioni bene, ma vale la pena notare questo avvertimento. – andyface

4

Utilizzare questa soluzione. produrrà anche i risultati desiderati quando l'attributo href non è definito. Se si utilizza un selettore CSS (JQuery), gli attributi non esistenti href non verranno rilevati.

$("a.pdf-download").each(function (i) { 
    if (!this.href) { 
     $(this).hide(); 
    } else { 
     $(this).show(); 
    } 
}) 

Non è necessario l'utilizzo di un metodo di jQuery per ottenere l'attributo href, perché this.href è altrettanto leggibile, più veloce e anche universalmente supportato.

0

Sono un jquery principiante me stesso, ma questo è come lo farei:

$("a.pdf-download").each(function (i) { 

    var aHref = $(this).attr('href'); 

    if (aHref == '' || !aHref) { 

     $(this).hide(); 

    }; 

}); 

Demo: http://jsfiddle.net/BZq9c/1/

6

È anche possibile fare questo con un selettore jQuery, come segue:

1
$("a.pdf-download").each(function() { 
    var href = $(this).attr("href"); 
    if(href == '') { 
     $(this).remove(); 
    } 
}); 

o

$("a.pdf-download[href='']").remove()