En IE 7, ¿cómo puede obtener el valor literal del atributo href de un enlace, si el enlace se creó con jQuery?

Si tiene un enlace regular en HTML, puede obtener el valor de su atributo href usando jQuery's attr función:

<a id="testLink" href="test/link.html">Test Link</a>`

>>> $('#testLink').attr('href');
testLink.html

Ejemplo:

Sin embargo, si el enlace se creó usando jQuery, entonces en IE 7, esta función devuelve la URL absoluta a la que accedería el navegador si hiciera clic en el enlace (p. ej. https://stackoverflow.com/questions/ask/testLink.html), en lugar del valor literal de la href atributo.

Ejemplo:

yo también he intentado this, this.href y this.getAttribute('href'), y todos devuelven una URL absoluta.

¿Hay alguna manera de obtener el valor literal de la href atributo de un enlace creado por jQuery en IE 7?

preguntado el 01 de julio de 12 a las 17:07

Que buscas: el literal href valor asignado, o eliminando esquema, nombre de host, etc., si está presente? -

Informaría esto como un error en jQuery porque se espera que las funciones de jQuery se comporten de la misma manera en todos los navegadores. -

@Matchu: estoy buscando el valor literal 'href' asignado. -

3 Respuestas

Si está creando el enlace de una manera que jQuery se ve obligado a usar .innerHTML, no funcionará correctamente y está documentado en: http://api.jquery.com/html/ (también http://api.jquery.com/jQuery/#creating-new-elements):

Este método usa la propiedad innerHTML del navegador. Es posible que algunos navegadores no generen un DOM que replique exactamente la fuente HTML proporcionada. Por ejemplo, Internet Explorer anterior a la versión 8 convertirá todas las propiedades href de los enlaces en direcciones URL absolutas, e Internet Explorer anterior a la versión 9 no manejará correctamente los elementos HTML5 sin la adición de una capa de compatibilidad separada.

Para solucionarlo, cree el enlace de una manera que no fuerce el uso de jQuery .innerHTML:

$('#test').append( $("<a>", {href: "test/link.html", text: "Test Link"}));

http://jsfiddle.net/xtrEB/12/

Respondido 01 Jul 12, 17:07

Creo que no es posible, al menos no en IE7. Usos de JQuery innerHTML, e IE parece volver a escribir el atributo href a un nombre de dominio completo (FQDN) en la representación (se sabe que las versiones anteriores de IE lo hacen). Entonces, el valor literal se pierde en la representación. Si conoce la ruta, puede intentar encontrarla usando alguna ecuación de cadena, eliminando el dominio de la URL o algo así. O olvídate de IE<8 por completo si es posible.

Puede ser este artículo arroja algo de luz

Si usa JavaScript simple y métodos DOM para agregar elementos, puede recuperar el valor literal incluso en IE7. Ver este jsfiddle

Respondido 01 Jul 12, 17:07

prueba esto:

$('a').click(function () {
    var hrf = this.href;
    alert('this.href: \n' + hrf.slice(hrf.lastIndexOf('/')+1, hrf.length) );
    return false;
});

http://jsfiddle.net/xtrEB/5/

Respondido 01 Jul 12, 17:07

Creo que esto tiene el mismo problema que la otra respuesta en esta página: no podemos asumir que la ruta no tiene múltiples barras. - Matchu

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.