Comment pouvez-vous changer l'attribut href
(cible du lien) pour un lien hypertexte en utilisant jQuery?
"En HTML, les noms des éléments ne sont pas sensibles à la casse, mais en XML ils le sont." - w3.org/TR/CSS21/selector.html
Comment pouvez-vous changer l'attribut href
(cible du lien) pour un lien hypertexte en utilisant jQuery?
Utiliser
$("a").attr("href", "http://www.google.com/")
modifiera l'attribut href de tous les liens hypertextes pour pointer vers Google. Vous voudrez probablement un sélecteur un peu plus raffiné cependant. Par exemple, si vous avez un mélange de balises de lien source (hyperlien) et de balises d'ancrage de lien (alias "ancre") :
Le CodeProject
...Alors vous ne voudrez probablement pas ajouter accidentellement des attributs href
à ceux-ci. Pour des raisons de sécurité, nous pouvons spécifier que notre sélecteur ne correspondra qu'aux balises avec un attribut href
existant:
$("a[href]") //...
Bien sûr, vous aurez probablement quelque chose de plus intéressant en tête. Si vous voulez faire correspondre une ancre avec un href
spécifique existant, vous pourriez utiliser quelque chose comme cela :
$("a[href='http://www.google.com/']").attr('href', 'http://www.live.com/')
Cela trouvera des liens où le href
correspond exactement à la chaîne http://www.google.com/
. Une tâche plus complexe pourrait consister à faire correspondre, puis à mettre à jour uniquement une partie du href
:
$("a[href^='http://stackoverflow.com']")
.each(function()
{
this.href = this.href.replace(/^http:\/\/beta\.stackoverflow\.com/,
"http://stackoverflow.com");
});
La première partie sélectionne uniquement les liens où l'href commence par http://stackoverflow.com
. Ensuite, une fonction est définie qui utilise une expression régulière simple pour remplacer cette partie de l'URL par une nouvelle. Notez la flexibilité que cela vous donne - toute sorte de modification du lien pourrait être faite ici.
"En HTML, les noms des éléments ne sont pas sensibles à la casse, mais en XML ils le sont." - w3.org/TR/CSS21/selector.html
Pour plus de clarté, étant donné que cela est toujours parfois lié, j'ajouterai que depuis jQuery 1.4, le dernier exemple ne nécessite plus l'utilisation de each
- ce qui suit serait maintenant possible : $(sélecteur).attr('href', function() { return this.replace(/.../, '...'); });
Avec jQuery 1.6 et supérieur, vous devriez utiliser :
$("a").prop("href", "http://www.jakcms.com")
La différence entre prop
et attr
est que attr
récupère l'attribut HTML tandis que prop
récupère la propriété du DOM.
Vous pouvez trouver plus de détails dans ce post : .prop() vs .attr()
Une explication sur pourquoi vous devriez utiliser prop
plutôt que attr
serait appréciée, pour les personnes consultent la question et constatent que attr
fonctionne apparemment parfaitement bien dans les nouvelles versions de jQuery...
@womble en utilisant prop
est plus rapide que attr
car il met à jour le dom au lieu de modifier le HTML. jsfiddle.net/je4G5
En fonction que vous vouliez changer tous les liens identiques vers autre chose ou que vous vouliez contrôler uniquement ceux dans une section donnée de la page ou chacun individuellement, vous pourriez faire l'une de ces choses.
Changer tous les liens pour pointer vers Google Maps :
$("a[href='http://www.google.com/']").attr('href',
'http://maps.google.com/');
[
Pour changer les liens dans une section donnée, ajoutez la classe du div conteneur au sélecteur. Cet exemple changera le lien Google dans le contenu, mais pas dans le pied de page:
...lien vers Google dans le contenu...
Liens : Google
$(".content a[href='http://www.google.com/']").attr('href', 'http://maps.google.com/');`
Pour changer les liens individuels indépendamment de leur emplacement dans le document, ajoutez un id au lien, puis ajoutez cet id au sélecteur. Cet exemple changera le deuxième lien Google dans le contenu, mais pas le premier ni celui dans le pied de page:
...lien vers Google
dans le contenu...
...deuxième lien vers Google
dans le contenu...
Liens : Google
$("a#changeme").attr('href',
'http://maps.google.com/');
Ce snippet est invoqué lorsqu'un lien de la classe 'menu_link' est cliqué et affiche le texte et l'URL du lien. Le retour false empêche le lien d'être suivi.
Option 1
Option 2
$('.menu_link').live('click', function() {
var thelink = $(this);
alert ( thelink.html() );
alert ( thelink.attr('href') );
alert ( thelink.attr('rel') );
return false;
});
Je ne suis pas trop pointilleux à propos du vote négatif, mais si vous ne dites pas pourquoi vous votez négativement, rien n'est accompli et cela ne vaut pas la peine.
Down-voted because your snippet and answer doesn't answer the original question, and doesn't really provide any explanation of why the information obtained using the snippet is helpful.
Baisser le vote de cette réponse est pointilleux. Il/elle n'a peut-être pas mis autant d'effort dans sa réponse que d'autres utilisateurs l'ont fait, mais il/elle a en effet fourni du code pour résoudre le problème. L'OP aurait juste besoin de réfléchir un peu plus avant de copier-coller une solution personnalisée.
Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.
17 votes
Pour ceux d'entre vous intéressés par des solutions sans l'utilisation de jQuery - stackoverflow.com/questions/179713/…
2 votes
Pour les nouvelles versions de jQuery : stackoverflow.com/a/6348239/4928642
2 votes
Le plus simple exemple sans jQuery stackoverflow.com/a/39276418/696535
2 votes
Une liste complète de solutions possibles, certains sélecteurs utiles et la façon d'obtenir la valeur des correspondances du regex et de les utiliser pour mettre à jour href: stackoverflow.com/a/49568546/1262248