javascript - obtener - outerhtml jquery
¿Por qué no puedes llamar a outerHTML en $(esto)? (4)
Agregaré lo que encontré para ser la solución correcta a lo que terminó siendo un defecto simple en la configuración predeterminada de Visual Studio para referencia futura.
Como no quería dejarlo pasar, busqué más y descubrí que, de forma predeterminada, jQuery IntelliSense es algo deplorable en Visual Studio 2013.
Debajo
Herramientas> Opciones> Editor de texto> Javascript> IntelliSense> Referencias
lo puse
Grupo de referencia: "Implícito (web)"
y agregó un archivo jQuery existente. Esto resolvió todos los problemas de mi pregunta e IntelliSense ahora sugiere todos los miembros y métodos correctamente, aunque esto debería haber funcionado de la caja en lugar de costarles a todos un montón de tiempo.
Cuando desee obtener el código HTML de un elemento DOM completo (envoltorio incluido), puede hacer lo siguiente (como se explica aquí ):
$(''#myElementId'')[0].outerHTML
Pero lo que no puede hacer es llamar a outerHTML
on $(this)
dentro, por ejemplo, un detector de clics o un alcance del cuerpo de la función de selector:
$(this).outerHTML //Doesn''t complete in IntelliSense, returns undefined in browser
o
$(this)[0].outerHTML //Correction, this DOES work, but it doesn''t complete in IntelliSense
porque IntelliSense no mostrará innerHTML
o outerHTML
en esas circunstancias, aunque con JavaScript outerHTML
puede hacer:
document.getElementById($(this).attr(''id'')).outerHTML
Entonces ... ¿qué pasa con eso?
El selector jQuery devuelve un objeto jQuery similar a un array que no tiene propiedad outerHTML.
Sin embargo, la matriz resultante jQuery contiene elementos DOM.
Significa que puedes acceder de esta manera.
$(".someClass")[0].outerHTML // it works for me
Actualización: Funciona para mí en todos los navegadores.
También puedo acceder al objeto jQuery tipo array en un controlador de evento click.
$(".someClass").click(function()
{
alert($(this)[0].outerHTML); // it works me too
});
Aquí está mi JSFiddle: http://jsfiddle.net/13btf60p/
Actualización 2:
OK, ahora entiendo tu pregunta. Debería haber funcionado. ¿Realmente necesita un IntelliSense para completar una construcción tan simple y simple?
Puede usar this
directamente para acceder a outerHTML
del objeto actual en lugar de ir indirectamente a $(this)
ya que representa el objeto DOM (que tiene propiedad outerHTML
) mientras que $(this)
representa el objeto jQuery.
this.outerHTML
outerHTML
es una propiedad DOM; jQuery no expone todas las propiedades DOM.
Si tiene un objeto jQuery, solo puede acceder directamente a esas propiedades y métodos que jQuery expone, y viceversa para los objetos DOM.
En términos orientados a objetos, los objetos jQuery no heredan de los objetos DOM, los contienen.
Al decir $x[0]
obtiene el objeto DOM para el primer elemento representado por un objeto jQuery.