30 votes

Mauvaise extraction de .attr ("href") dans IE7 par rapport à tous les autres navigateurs?

Peut-elle vraiment être vrai que l' attr("href") commande d'un lien de traitement est très différent dans IE7 en comparaison à tous les autres navigateurs?

Disons que j'ai une page à http://example.com/page.html et j'ai ce code HTML:

<a href="#someAnchor" class="lnkTest">Link text</a>

et ce jQuery:

var strHref = $(".lnkTest").attr("href");

Puis dans IE7 la valeur de l' strHref variable "http://example.com/page.htm#someAnchor" , mais dans d'autres navigateurs, il sera "#someAnchor".

Je crois que le dernier cas est le plus correct, donc c'est juste une affaire de IE7 d'être un mauvais garçon ou est-ce un bug en jQuery?

18voto

meder Points 81864

Ce n'est certainement pas un bug dans jQuery, mais plutôt des navigateurs incompatibles implémentations de .getAttribute('href') - je suggère d'utiliser seulement .get(0).href de la cohérence.

Semble que vous pouvez accéder au texte de l'attribut dans IE et Mozilla à l'aide de .get(0).getAttribute('href', 2) si vous ne voulez pas l'URI absolu. Notez cependant cela ne fonctionne pas à l'Opéra, et je ne l'ai pas testé dans Safari/Chrome/quelque chose d'autre.

Vous pouvez également dépouiller le domaine ou split sur " # " pour .get(0).href et l'utilisation de la deuxième partie du tableau, en supposant qu'il contient même des '#' ( vérifiez .length ).

http://www.glennjones.net/Post/809/getAttributehrefbug.htm

4voto

drkloc Points 41

Je crois que c'est implémenté comme ça dans tous les IE 7+.

J'utilise:

 var href=jQuery('#foo').attr('href');
href=href.substring(href.indexOf('#'));
 

J'espère que cela aide! À votre santé.

2voto

timing Points 872

J'ai trouvé un bogue lié à ce problème: http://bugs.jquery.com/ticket/2747 jQuery a implémenté une solution de contournement pour le «bogue» IE7. Cependant, dans jQuery 1.7.1, ce bogue a été réintroduit. J'ai créé un nouveau bogue pour 1.7.1: http://bugs.jquery.com/ticket/11129

1voto

chrwahl Points 31

J'utilise:

 var hrefArr = $(this).attr('href').split('/');
var id = hrefArr[hrefArr.length-1];
 

quand j'ai besoin de tout après le dernier "/".

1voto

Johansrk Points 1627

une autre façon consiste à simplement utiliser un attribut de données, au lieu de href

 <a data-href="#anchor-0">example</a>
 

.

 var href = $(this).attr('data-href');
 

Prograide.com

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.

Powered by:

X