Définition de l'attribut href à l'exécution

202

Quelle est la meilleure façon de définir l' hrefattribut du<a> balise au moment de l'exécution à l'aide de jQuery?

De plus, comment obtenez-vous la valeur de l' hrefattribut de la <a>balise à l'aide de jQuery?

gautamlakum
la source

Réponses:

378

Pour obtenir ou définir un attribut d'un élément HTML, vous pouvez utiliser la element.attr()fonction dans jQuery.

Pour obtenir l' attribut href , utilisez le code suivant:

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

Pour définir l' attribut href , utilisez le code suivant:

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

Dans les deux cas, veuillez utiliser le sélecteur approprié. Si vous avez défini la classe de l'élément d'ancrage, utilisez '.class-name'et si vous avez défini l'ID de l'élément d'ancrage, utilisez '#element-id'.

Stout Joe
la source
1
Je l'ai utilisé pour obtenir href. alert ($ ("# publication-lien"). attr ("href")); Et cela m'a donné une alerte "indéfinie".
gautamlakum
3
cela signifie probablement que votre lien de publication est une classe plutôt qu'un identifiant. try: alert ($ (". publish-link"). attr ("href")); à la place
jim tollan
3
@ lakum4stackof: Cela aiderait si vous postez la balise
ahh désolé. vous avez raison. J'ai appliqué la classe et j'ai utilisé «#» dans le code jquery. cela a fonctionné avec alert ($ (". publish-link"). attr ("href")); Merci beaucoup. :)
gautamlakum
18

Dans jQuery 1.6+, il est préférable d'utiliser:

$(selector).prop('href',"http://www...")pour définir la valeur, et

$(selector).prop('href')pour obtenir la valeur

En bref, .propobtient et définit des valeurs sur l' objet DOM , et .attrobtient et définit des valeurs dans le HTML . Cela rend .propun peu plus rapide et peut-être plus fiable dans certains contextes.

Gerbus
la source
1
acceptez que '.prop' obtiendra le chemin complet comme: http: //www.../index.html tandis que .attr obtiendra seulement: 'index.html'
DevWL
14

Définissez l' hrefattribut avec

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

et le lire en utilisant

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

Où "sélecteur" est un sélecteur jQuery valide pour votre <a> élément (".myClass" ou "#myId" pour nommer les plus simples).

J'espère que cela t'aides !

Valentin Flachsel
la source
Je l'ai utilisé pour obtenir href. alert ($ ("# publication-lien"). attr ("href")); Et cela m'a donné une alerte "indéfinie".
gautamlakum
@ lakum4stackof vous avez probablement exécuté ce code d'alerte AVANT de définir votre hrefattribut, en supposant que votre sélecteur est correct.
Valentin Flachsel du
2
try: alert ($ (". publish-link"). attr ("href")); car votre élément peut être une classe plutôt qu'un identifiant. en fait, probablement en utilisant $ (this) si c'est à l'intérieur de votre événement
jim tollan
2

Petite comparaison des tests de performances pour trois solutions:

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

entrez la description de l'image ici

Ici, vous pouvez effectuer le test par vous-même https://jsperf.com/a-href-js-change


Nous pouvons lire les valeurs href de la manière suivante

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

entrez la description de l'image ici

Ici, vous pouvez effectuer le test par vous-même https://jsperf.com/a-href-js-read

Kamil Kiełczewski
la source
Agréable! Curieusement, j'obtiens des résultats opposés de votre part, mais il est intéressant de pouvoir les exécuter moi-même.
HoldOffHunger
@HoldOffHunger oui - très intéressant - quels sont votre machine, OS et navigateur?
Kamil Kiełczewski
1
FF59, Win10. Les résultats semblent avoir à nouveau légèrement changé (cela dépend peut-être du nombre d'onglets ouverts), mais ils restent généralement les mêmes: imgur.com/a/MLDnTWM Machine: carte Intel de 10 ans (dp55wg), quadricœur de 3,1 GHz, 16 Go de RAM DDR3, GT1070.
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>
Nanang HD
la source
1
Les réponses de code uniquement ne sont pas aussi utiles que les réponses qui ont du code de travail et des explications utiles. Dans ce cas, il serait utile d'expliquer cette réponse à un enfant de 5 ans.
Somnath Muluk