part parse obtener link getpath current jquery internet-explorer-7 relative-path href absolute-path

parse - window.location.href jquery



¿Extracción incorrecta de.attr("href") en IE7 frente a todos los demás navegadores? (7)

¿Es realmente cierto que el comando attr("href") para un enlace se maneja de forma muy diferente en IE7 en comparación con todos los demás navegadores?

Digamos que tengo una página en http://example.com/page.html y tengo este HTML:

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

y esto jQuery:

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

Luego, en IE7, el valor de la variable strHref será "http://example.com/page.htm#someAnchor" pero en otros navegadores será "#someAnchor" .

Creo que el último caso mencionado es el más correcto, ¿es solo un caso de IE7 siendo un chico malo o es un error en jQuery?


Ciertamente no es un error en jQuery, sino implementaciones inconsistentes de los navegadores de .getAttribute(''href'') . Sugiero usar solo .get(0).href para la coherencia.

Parece que puede acceder al texto del atributo en IE y Mozilla usando .get(0).getAttribute(''href'', 2) si no desea el URI absoluto. Sin embargo, tenga en cuenta que esto no funcionará en Opera y no lo he probado en Safari / Chrome / cualquier otra cosa.

También podría quitar el dominio o dividir en ''#'' para .get(0).href y usar la segunda parte del array suponiendo que incluso contenga ''#'' (verificar .length ).

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


Creo que está implementado así en todos los IE 7+.

Yo suelo:

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

¡Espero eso ayude! Aclamaciones.


El problema es que IE7 e IE8 cambian también el texto. Entonces, una buena solución es hacer esto

$(''#linkId'').attr(''href'',''newlink'').text(''oldtext'');



Otra forma es simplemente usar un atributo de datos, en lugar de href

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

.

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


Terminé creando una variable a través de PHP, luego usé el método javascript replace () para quitarlo del 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>


Yo suelo:

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

cuando lo necesito todo después del último "/".