Falsche Extraktion von .attr ( „href“) in IE7 vs allen anderen Browsern?
-
22-09-2019 - |
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?
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
).
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');