Como você pode alterar o href de um hiperlink usando o jQuery?
Como você pode alterar o href de um hiperlink usando o jQuery?
Respostas:
Usando
$("a").attr("href", "http://www.google.com/")
modificará o href de todos os hiperlinks para apontar para o Google. Você provavelmente quer um seletor um pouco mais refinado. Por exemplo, se você tiver uma combinação de tags de âncora de origem de link (hiperlink) e destino de link (também conhecida como "âncora"):
<a name="MyLinks"></a>
<a href="http://www.codeproject.com/">The CodeProject</a>
... Então você provavelmente não deseja adicionar acidentalmente href
atributos a eles. Por segurança, podemos especificar que nosso seletor corresponderá apenas às <a>
tags com um href
atributo existente :
$("a[href]") //...
Claro, você provavelmente terá algo mais interessante em mente. Se você deseja combinar uma âncora com uma existente específica href
, você pode usar algo como isto:
$("a[href='http://www.google.com/']").attr('href', 'http://www.live.com/')
Isso encontrará links onde href
corresponde exatamente à string http://www.google.com/
. Uma tarefa mais envolvida pode estar correspondendo e, em seguida, atualizando apenas parte do href
:
$("a[href^='http://stackoverflow.com']")
.each(function()
{
this.href = this.href.replace(/^http:\/\/beta\.stackoverflow\.com/,
"http://stackoverflow.com");
});
Os seleciona primeira parte mas apenas ligações onde a href começa com http://stackoverflow.com
. Em seguida, é definida uma função que usa uma expressão regular simples para substituir esta parte da URL por uma nova. Observe a flexibilidade que isso oferece - qualquer tipo de modificação no link pode ser feita aqui.
each
- o seguinte agora seria possível:$(selector).attr('href', function() { return this.replace(/.../, '...'); });
href
: ...return this.href.replace(/.../, '...'); });
Com o jQuery 1.6 e superior, você deve usar:
$("a").prop("href", "http://www.jakcms.com")
A diferença entre prop
e attr
é que attr
agarra o atributo HTML enquanto prop
agarra a propriedade DOM.
Você pode encontrar mais detalhes neste post: .prop () vs .attr ()
prop
mais attr
seria apreciada, para as pessoas que chegam à pergunta e attr
prop
é mais rápido do que attr
porque atualiza o dom em vez de modificar o HTML. jsfiddle.net/je4G5
Use o attr
método em sua pesquisa. Você pode alternar qualquer atributo com um novo valor.
$("a.mylink").attr("href", "http://cupcream.com");
Dependendo se você deseja alterar todos os links idênticos para outros itens ou se deseja controlar apenas os de uma determinada seção da página ou de cada um individualmente, você pode fazer um destes.
Altere todos os links para o Google para que eles apontem para o Google Maps:
<a href="http://www.google.com">
$("a[href='http://www.google.com/']").attr('href',
'http://maps.google.com/');
Para alterar os links em uma determinada seção, adicione a classe da div do contêiner ao seletor. Este exemplo alterará o link do Google no conteúdo, mas não no rodapé:
<div class="content">
<p>...link to <a href="http://www.google.com/">Google</a>
in the content...</p>
</div>
<div class="footer">
Links: <a href="http://www.google.com/">Google</a>
</div>
$(".content a[href='http://www.google.com/']").attr('href',
'http://maps.google.com/');
Para alterar links individuais, independentemente de onde eles caem no documento, adicione um ID ao link e, em seguida, adicione esse ID ao seletor. Este exemplo altera o segundo link do Google no conteúdo, mas não o primeiro ou o rodapé:
<div class="content">
<p>...link to <a href="http://www.google.com/">Google</a>
in the content...</p>
<p>...second link to <a href="http://www.google.com/"
id="changeme">Google</a>
in the content...</p>
</div>
<div class="footer">
Links: <a href="http://www.google.com/">Google</a>
</div>
$("a#changeme").attr('href',
'http://maps.google.com/');
Embora o OP tenha solicitado explicitamente uma resposta do jQuery, você não precisa usar o jQuery para tudo nos dias de hoje.
Se você deseja alterar o href
valor de todos os <a>
elementos, selecione todos eles e, em seguida, itere através do nodelist : (exemplo)
var anchors = document.querySelectorAll('a');
Array.prototype.forEach.call(anchors, function (element, index) {
element.href = "http://stackoverflow.com";
});
Se você deseja alterar o href
valor de todos os <a>
elementos que realmente possuem um href
atributo, selecione-os adicionando o [href]
seletor de atributo ( a[href]
): (exemplo)
var anchors = document.querySelectorAll('a[href]');
Array.prototype.forEach.call(anchors, function (element, index) {
element.href = "http://stackoverflow.com";
});
Se você deseja alterar o href
valor dos <a>
elementos que contêm um valor específico, por exemplo google.com
, use o seletor de atributos a[href*="google.com"]
: (exemplo)
var anchors = document.querySelectorAll('a[href*="google.com"]');
Array.prototype.forEach.call(anchors, function (element, index) {
element.href = "http://stackoverflow.com";
});
Da mesma forma, você também pode usar os outros seletores de atributo . Por exemplo:
a[href$=".png"]
poderia ser usado para selecionar <a>
elementos cujo href
valor termina com .png
.
a[href^="https://"]
Pode ser utilizado para seleccionar <a>
elementos com href
valores que são prefixados com https://
.
Se você deseja alterar o href
valor dos <a>
elementos que atendem a várias condições: (exemplo)
var anchors = document.querySelectorAll('a[href^="https://"], a[href$=".png"]');
Array.prototype.forEach.call(anchors, function (element, index) {
element.href = "http://stackoverflow.com";
});
..no necessidade de regex, na maioria dos casos.
Esse trecho é chamado quando um link da classe 'menu_link' é clicado e mostra o texto e o URL do link. O retorno false impede que o link seja seguido.
<a rel='1' class="menu_link" href="option1.html">Option 1</a>
<a rel='2' class="menu_link" href="option2.html">Option 2</a>
$('.menu_link').live('click', function() {
var thelink = $(this);
alert ( thelink.html() );
alert ( thelink.attr('href') );
alert ( thelink.attr('rel') );
return false;
});
A maneira simples de fazer isso é:
Função Attr (desde o jQuery versão 1.0)
$("a").attr("href", "https://stackoverflow.com/")
ou
Função Prop (desde o jQuery versão 1.6)
$("a").prop("href", "https://stackoverflow.com/")
Além disso, a vantagem da maneira acima é que, se o seletor selecionar uma única âncora, ele atualizará somente essa âncora e se o seletor retornar um grupo de âncoras, ele atualizará o grupo específico por meio de apenas uma instrução.
Agora, existem várias maneiras de identificar a âncora exata ou o grupo de âncoras:
Muito Simples:
$("a")
$("a:eq(0)")
active
):$("a.active")
profileLink
ID de exemplo ):$("a#proileLink")
$("a:first")
Mais úteis:
$("[href]")
$("a[href='www.stackoverflow.com']")
$("a[href!='www.stackoverflow.com']")
$("a[href*='www.stackoverflow.com']")
$("a[href^='www.stackoverflow.com']")
$("a[href$='www.stackoverflow.com']")
Agora, se você deseja alterar URLs específicos, pode fazer isso da seguinte maneira:
Por exemplo, se você deseja adicionar um site proxy a todos os URLs que acessam google.com, é possível implementá-lo da seguinte maneira:
$("a[href^='http://www.google.com']")
.each(function()
{
this.href = this.href.replace(/http:\/\/www.google.com\//gi, function (x) {
return "http://proxywebsite.com/?query="+encodeURIComponent(x);
});
});
Pare de usar o jQuery apenas por isso! Isso é tão simples apenas com JavaScript.
document.querySelector('#the-link').setAttribute('href', 'http://google.com');
Se você instalar o plugin ShortCode Exec PHP, poderá criar este Shortcode que chamei de myjavascript
?><script type="text/javascript">
jQuery(document).ready(function() {
jQuery("div.fusion-logo a").attr("href","tel:303-985-9850");
});
</script>
Agora você pode ir para Aparência / Widgets, escolher uma das áreas do widget de rodapé e usar um widget de texto para adicionar o seguinte código curto
[myjavascript]
O seletor pode mudar dependendo da imagem usada e da retina pronta, mas você sempre pode descobrir isso usando as ferramentas do desenvolvedor.
href
em um atributo, para que você possa alterá-lo usando JavaScript puro, mas se você já tiver o jQuery injetado em sua página, não se preocupe, mostrarei as duas maneiras:
Imagine que você tem isso href
abaixo:
<a id="ali" alt="Ali" href="http://dezfoolian.com.au">Alireza Dezfoolian</a>
E você gosta de mudar o link ...
Usando JavaScript puro sem nenhuma biblioteca, você pode:
document.getElementById("ali").setAttribute("href", "https://stackoverflow.com");
Mas também no jQuery você pode fazer:
$("#ali").attr("href", "https://stackoverflow.com");
ou
$("#ali").prop("href", "https://stackoverflow.com");
Nesse caso, se você já tiver o jQuery injetado, provavelmente o jQuery parecerá mais curto e mais entre navegadores ... mas, além disso, eu vou com o JS
...