Impostazione dell'attributo href in fase di esecuzione


202

Qual è il modo migliore per impostare l' hrefattributo del <a>tag in fase di esecuzione utilizzando jQuery?

Inoltre, come si ottiene il valore hrefdell'attributo del <a>tag usando jQuery?

Risposte:


378

Per ottenere o impostare un attributo di un elemento HTML, è possibile utilizzare la element.attr()funzione in jQuery.

Per ottenere l' attributo href , utilizzare il seguente codice:

var a_href = $('selector').attr('href');

Per impostare l' attributo href , utilizzare il seguente codice:

$('selector').attr('href','http://example.com');

In entrambi i casi, utilizzare il selettore appropriato. Se hai impostato la classe per l'elemento anchor, usa '.class-name'e se hai impostato l'id per l'elemento anchor, usa '#element-id'.


1
L'ho usato per ottenere href. alert ($ ( "# pubblicare-link") attr ( "href").); E mi ha dato un avviso "indefinito".
gautamlakum,

3
probabilmente significa che il tuo link di pubblicazione è una classe piuttosto che un ID. provare: alert ($ (". publishing-link"). attr ("href")); invece
jim tollan il

3
@ lakum4stackof: sarebbe utile se pubblichi l'esatto tag

ah scusa. hai ragione. Ho applicato la classe e ho usato '#' nel codice jquery. ha funzionato con alert ($ (". publishing-link"). attr ("href")); Grazie mille. :)
gautamlakum,

18

In jQuery 1.6+ è meglio usare:

$(selector).prop('href',"http://www...")per impostare il valore e

$(selector).prop('href')per ottenere il valore

In breve, .propottiene e imposta i valori sull'oggetto DOM e .attrottiene e imposta i valori nell'HTML . Questo rende .propun po 'più veloce e forse più affidabile in alcuni contesti.


1
accetto '.prop' otterrà il percorso completo come: http: //www.../index.html mentre .attr otterrà solo: 'index.html'
DevWL,

14

Impostare l' hrefattributo con

$(selector).attr('href', 'url_goes_here');

e leggilo usando

$(selector).attr('href');

Dove "selector" è un selettore jQuery valido per il tuo <a>elemento (".myClass" o "#myId" per nominare quelli più semplici).

Spero che questo ti aiuti !


L'ho usato per ottenere href. alert ($ ( "# pubblicare-link") attr ( "href").); E mi ha dato un avviso "indefinito".
gautamlakum,

@ lakum4stackof molto probabilmente hai eseguito quel codice di avviso PRIMA di impostare l' hrefattributo, supponendo che il selettore sia corretto.
Valentin Flachsel,

2
provare: alert ($ (". publishing-link"). attr ("href")); poiché il tuo elemento può essere una classe anziché un ID. in effetti, probabilmente usando $ (questo) se è all'interno del tuo evento
Jim Tollan

2

Confronto dei test delle prestazioni di piccole dimensioni per tre soluzioni:

  1. $(".link").prop('href',"https://example.com")
  2. $(".link").attr('href',"https://example.com")
  3. document.querySelector(".link").href="https://example.com";

inserisci qui la descrizione dell'immagine

Qui puoi eseguire il test da solo https://jsperf.com/a-href-js-change


Possiamo leggere i valori href nei seguenti modi

  1. let href = $(selector).prop('href');
  2. let href = $(selector).attr('href');
  3. let href = document.querySelector(".link").href;

inserisci qui la descrizione dell'immagine

Qui puoi eseguire il test da solo https://jsperf.com/a-href-js-read


Bello! Stranamente, sto ottenendo risultati opposti da te, ma è interessante riuscire a gestirli da solo.
HoldOffHunger,

@HoldOffHunger sì - molto interessante - qual è la tua macchina, sistema operativo e browser?
Kamil Kiełczewski,

1
FF59, Win10. I risultati sembrano essere leggermente cambiati di nuovo (forse dipende dal numero di schede aperte), ma sono sempre gli stessi: imgur.com/a/MLDnTWM Macchina: scheda Intel di 10 anni (dp55wg), quad-core da 3,1 ghz, Ram da 16 GB ddr3, gtx1070.
HoldOffHunger,

1
<style>
a:hover {
    cursor:pointer;
}
</style>

<script type="text/javascript" src="lib/jquery.js"></script>
<script type="text/javascript">
$(document).ready(function() {
    $(".link").click(function(){
        var href = $(this).attr("href").split("#");
        $(".results").text(href[1]);
    })
})
</script>



<a class="link" href="#one">one</a><br />
<a class="link" href="#two">two</a><br />
<a class="link" href="#three">three</a><br />
<a class="link" href="#four">four</a><br />
<a class="link" href="#five">five</a>


<br /><br />
<div class="results"></div>

1
Le risposte di solo codice non sono utili quanto le risposte che hanno un codice funzionante più utili spiegazioni. In questo caso, varrebbe la pena spiegare questa risposta a un bambino di 5 anni.
Somnath Muluk
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.