Question

Peut-il vraiment vrai que la commande attr("href") un lien est géré très différent IE7 par rapport à tous les autres navigateurs?

Disons que j'ai une page http://example.com/page.html et je cette HTML:

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

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, il sera "#someAnchor".

Je crois que le dernier cas est le plus correct, donc est-ce juste un cas de IE7 être un mauvais garçon ou est-ce un bogue dans jQuery?

Était-ce utile?

La solution

Il est certainement pas un bogue dans jQuery mais les implémentations incompatibles des navigateurs de .getAttribute('href') -. Je suggère d'utiliser simplement .get(0).href pour la cohérence

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

Vous pouvez dépouilleront le domaine ou fendu sur « # » pour .get(0).href et utiliser la deuxième partie du tableau en supposant qu'il contient même « # » (vérifier .length).

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

Autres conseils

Je crois qu'il est mis en œuvre comme ça dans tous les + IE 7.

J'utilise:

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

it helps! Vive.

J'ai trouvé un bug lié à cette question: http://bugs.jquery.com/ticket/2747 jQuery mis en œuvre une solution de contournement pour « bug » IE7. Cependant, dans jQuery 1.7.1 ce bug a été réintroduite. J'ai créé un nouveau bug pour 1.7.1: http://bugs.jquery.com/ticket/11129

J'utilise:

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

quand je dois tout après le dernier « /".

Une autre façon est d'utiliser simplement un attribut de données, au lieu de href

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

.

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

I fini par créer une variable via PHP, puis en utilisant la bande de javascript méthode replace () hors de la href:

<script>var domain = 'http://<?=$_SERVER['HTTP_HOST']?>';</script>

<script>
$(function(){
/* prevent default action of all anchors with hash class */
$('#canvas').on('click', 'a.hash', function(event) {
    event.preventDefault();
            // get the href of the anchor
    var hash = '!' + $(this).attr('href');
            // remove the absolute url if it exists
    hash = hash.replace( domain, '' );
    // redirect
            window.location.hash = hash;
});
});
</script>

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

$('#linkId').attr('href','newlink').text('oldtext');
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top