Frage

Kann es wirklich wahr sein, dass der attr("href") Befehl für einen Link in IE7 im Vergleich zu allen anderen Browsern sehr unterschiedlich gehandhabt wird?

Sagen wir, ich habe eine Seite unter http://example.com/page.html und ich haben diese HTML:

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

und diese jQuery:

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

Dann in IE7 der Wert des strHref Variable "http://example.com/page.htm#someAnchor" sein wird, aber in anderen Browsern wird es "#someAnchor" sein.

Ich glaube, dass die letztgenannte Fall ist die richtige, so ist es nur ein Fall von IE7 ein böser Junge sein oder ist es ein Bug in jQuery?

War es hilfreich?

Lösung

Es ist sicherlich nicht ein Bug in jQuery sondern Browsern inkonsistent Implementierungen von .getAttribute('href') -. Ich schlage vor, mit nur .get(0).href für Konsistenz

Scheint, wie Sie das Attribut Text in IE und Mozilla .get(0).getAttribute('href', 2) zugreifen können, wenn Sie nicht die absolute URI wollen. Hinweis aber das wird nicht funktionieren in Opera und ich habe nicht in Safari / Chrome / etwas anderes getestet.

Sie können auch die Domäne oder Split auf ‚#‘ Streifen aus für .get(0).href und verwenden Sie den zweiten Teil des Arrays vorausgesetzt, es enthält sogar ‚#‘ (Scheck .length).

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

Andere Tipps

Ich glaube, es so, dass in allen IE 7 + implementiert wird.

ich benutze:

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

Hope, es hilft! Prost.

fand ich einen Fehler zu diesem Problem: http://bugs.jquery.com/ticket/2747 jQuery implementiert eine Abhilfe für die ‚Fehler‘ IE7. Doch in jQuery 1.7.1 wurde dieser Fehler wieder. Ich habe einen neuen Bug für 1.7.1: http://bugs.jquery.com/ticket/11129

ich benutze:

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

wenn ich brauche alles nach dem letzten „/".

ein anderer Weg ist, um nur ein Datenattribut zu verwenden, statt href

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

.

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

beenden ich eine Variable über PHP zu schaffen, dann das Javascript ersetzen () -Methode Streifens es des href out:

<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>

Das Problem ist, dass IE7 und IE8 Änderung auch der Text. Also eine gute Abhilfe ist, wie diese

zu tun
$('#linkId').attr('href','newlink').text('oldtext');
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top