extracción equivocado de .attr ( “href”) en IE7 vs todos los otros navegadores?
-
22-09-2019 - |
Pregunta
Puede realmente ser cierto que el comando attr("href")
para un enlace se maneja muy diferente en Internet Explorer 7 en comparación con todos los otros navegadores?
Vamos a decir que tienen una página en http://example.com/page.html y yo tienen este código HTML:
<a href="#someAnchor" class="lnkTest">Link text</a>
y esto jQuery:
var strHref = $(".lnkTest").attr("href");
A continuación, en Internet Explorer 7 el valor de la variable strHref
será "http://example.com/page.htm#someAnchor"
pero en otros navegadores que será "#someAnchor"
.
Creo que el último caso mencionado es el más correcto, por lo que es sólo un caso de IE7 ser un chico malo o se trata de un error en jQuery?
Solución
Es ciertamente no un error en jQuery pero en lugar implementaciones inconsistentes navegadores de .getAttribute('href')
-. Me sugieren usar simplemente para mantener la coherencia .get(0).href
Parece que se puede acceder al texto del atributo en IE y Mozilla usando .get(0).getAttribute('href', 2)
si no desea que el URI absoluto. Nota sin embargo, esto no va a funcionar en Opera y no he probado en Safari / Chrome / cualquier otra cosa.
También puede pelar hacia fuera del dominio o por partes de la '#' para .get(0).href
y utilizar la segunda parte de la matriz suponiendo incluso contiene '#' (verificación .length
).
Otros consejos
Creo que está implementado como que en todo el IE 7 +.
Yo uso:
var href=jQuery('#foo').attr('href');
href=href.substring(href.indexOf('#'));
Hope que ayuda! Saludos.
He encontrado un fallo relacionado con este tema: http://bugs.jquery.com/ticket/2747 jQuery implementa una solución para el Internet Explorer 7 'bug'. Sin embargo, en jQuery 1.7.1 se reintrodujo este error. He creado un nuevo error de 1.7.1: http://bugs.jquery.com/ticket/11129
Yo uso:
var hrefArr = $(this).attr('href').split('/');
var id = hrefArr[hrefArr.length-1];
cuando necesito todo después de la última "/".
Otra forma es utilizar sólo un atributo de datos, en lugar de href
<a data-href="#anchor-0">example</a>
.
var href = $(this).attr('data-href');
I terminó creando una variable a través de PHP, a continuación, utilizando el javascript replace () método de la tira fuera 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>
El problema es que IE7 e IE8 cambio también el texto. Así que una buena solución consiste en hacer como esto
$('#linkId').attr('href','newlink').text('oldtext');