Configurando o atributo href em tempo de execução

202

Qual é a melhor maneira de definir o href atributo da <a>tag em tempo de execução usando o jQuery?

Além disso, como você obtém o valor do hrefatributo da <a>tag usando jQuery?

gautamlakum
fonte

Respostas:

378

Para obter ou definir um atributo de um elemento HTML, você pode usar a element.attr()função no jQuery.

Para obter o atributo href , use o seguinte código:

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

Para definir o atributo href , use o seguinte código:

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

Nos dois casos, use o seletor apropriado. Se você definiu a classe para o elemento âncora, use '.class-name'e se você definiu o ID para o elemento âncora, use '#element-id'.

Stout Joe
fonte
1
Eu usei isso para obter href. alert ($ ("# link de publicação"). attr ("href")); E isso me deu um alerta "indefinido".
gautamlakum
3
provavelmente significa que seu link de publicação é uma classe e não um ID. tente: alert ($ (". publique-link"). attr ("href")); em vez
Tollan jim
3
@ lakum4stackof: Seria bom se você postar a tag exata <a> você está usando aqui :)
ahh desculpa você está certo. Eu apliquei classe e usei '#' no código jquery. funcionou com alert ($ (". publish-link"). attr ("href")); Muito obrigado. :)
gautamlakum
18

No jQuery 1.6+, é melhor usar:

$(selector).prop('href',"http://www...")para definir o valor e

$(selector).prop('href')para obter o valor

Em resumo, .propobtém e define valores no objeto DOM e .attrobtém e define valores no HTML . Isso torna .propum pouco mais rápido e possivelmente mais confiável em alguns contextos.

Gerbus
fonte
1
concordo '.prop' vai ter caminho completo como: http: //www.../index.html enquanto .attr só vai ficar: 'index.html'
DevWL
14

Defina o hrefatributo com

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

e leia usando

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

Onde "seletor" é qualquer seletor jQuery válido para o seu <a>elemento (".myClass" ou "#myId" para nomear os mais simples).

Espero que isto ajude !

Valentin Flachsel
fonte
Eu usei isso para obter href. alert ($ ("# link de publicação"). attr ("href")); E isso me deu um alerta "indefinido".
gautamlakum
@ lakum4stackof você provavelmente executou o código de alerta ANTES de definir seu hrefatributo, assumindo que o seletor esteja correto.
Valentin Flachsel
2
tente: alert ($ (". publique-link"). attr ("href")); como seu elemento pode ser uma classe e não um ID. na verdade, provavelmente usando $ (this) se ele está dentro de seu evento
Tollan jim
2

Comparação de teste de desempenho pequeno para três soluções:

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

insira a descrição da imagem aqui

Aqui você pode realizar o teste sozinho https://jsperf.com/a-href-js-change


Podemos ler os valores href das seguintes maneiras

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

insira a descrição da imagem aqui

Aqui você pode realizar o teste sozinho https://jsperf.com/a-href-js-read

Kamil Kiełczewski
fonte
Agradável! Estranhamente, estou obtendo resultados opostos de você, mas é interessante poder executá-los eu mesmo.
HoldOffHunger
@HoldOffHunger sim - muito interessante - qual é a sua máquina, sistema operacional e navegador?
Kamil Kiełczewski 29/08/19
1
FF59, Win10. Os resultados parecem ter mudado um pouco novamente (talvez dependa do número de guias abertas), mas ainda são os mesmos: imgur.com/a/MLDnTWM Máquina: placa intel de 10 anos (dp55wg), quad-core de 3,1ghz, Memória ram ddr3 de 16gb, gtx1070.
HoldOffHunger 29/08
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
fonte
1
As respostas somente de código não são tão úteis quanto as respostas que possuem código funcional, além de explicações úteis. Nesse caso, vale a pena explicar essa resposta a uma criança de 5 anos.
Somnath Muluk