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?

¿Fue útil?

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

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

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');
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top