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

Peut-il vraiment être vrai que la commande attr("href") pour un lien est traitée de manière très différente dans IE7 par rapport à tous les autres navigateurs?

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

 Link text 

et ce jQuery:

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

Ensuite, dans IE7, la valeur de la variable strHref sera "http://example.com/page.htm#someAnchor" mais dans d’autres navigateurs, elle sera "#someAnchor" .

Je crois que le dernier cas mentionné est le cas le plus correct. S’agit-il simplement du cas d’IE7 ou d’un bug dans jQuery?

Ce n’est certainement pas un bogue dans jQuery, mais plutôt une implémentation incohérente de .getAtsortingbute('href') dans les navigateurs – je suggère d’utiliser simplement .get(0).href pour la cohérence.

On dirait que vous pouvez accéder au texte d’atsortingbut dans IE et Mozilla en utilisant .get(0).getAtsortingbute('href', 2) si vous ne voulez pas de l’URI absolu. Notez cependant que cela ne fonctionnera pas dans Opera et que je n’ai pas testé dans Safari / Chrome / autre.

Vous pouvez également supprimer le domaine ou le fractionner sur ‘#’ pour .get(0).href et utiliser la deuxième partie du tableau en supposant qu’il contienne même ‘#’ (vérifiez .length ).

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

Je crois que c’est la même chose dans IE 7+.

J’utilise:

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

J’espère que ça aide! À votre santé.

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” d’IE7. Cependant, dans jQuery 1.7.1, ce bogue a été réintroduit. J’ai créé un nouveau bogue pour la version 1.7.1: http://bugs.jquery.com/ticket/11129

J’utilise:

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

quand j’ai besoin de tout après le dernier “/”.

un autre moyen consiste simplement à utiliser un atsortingbut de données, au lieu de href

 example 

.

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

J’ai fini par créer une variable via PHP, puis en utilisant la méthode javascript replace (), supprimez-la du href:

   

Le problème est que IE7 et IE8 changent également le texte. Donc, une bonne solution consiste à faire comme ça

 $('#linkId').attr('href','newlink').text('oldtext');