Pregunta

¿Cómo se convierte un objeto jQuery en una cadena?

¿Fue útil?

Solución

Supongo que está pidiendo la cadena HTML completa. Si ese es el caso, algo así hará el truco:

$('<div>').append($('#item-of-interest').clone()).html(); 

Esto se explica con mayor profundidad aquí , pero esencialmente crea un nuevo nodo para envolver el elemento de interés, hacer las manipulaciones, eliminarlo y obtener el HTML.

Si está justo después de una representación de cadena, vaya con new String (obj) .

Actualizar

Escribí la respuesta original en 2009. A partir de 2014, la mayoría de los principales navegadores ahora admiten externalHTML como propiedad nativa (ver, por ejemplo, Firefox y Internet & nbsp; Explorer ), para que pueda hacer:

$('#item-of-interest').prop('outerHTML');

Otros consejos

Con jQuery 1.6, esta parece ser una solución más elegante:

$('#element-of-interest').prop('outerHTML');

Simplemente use .get (0) para tomar el elemento nativo y obtener su propiedad externalHTML:

var $elem = $('<a href="#">Some element</a>');
console.log("HTML is: " + $elem.get(0).outerHTML);

¿Puedes ser un poco más específico? Si está intentando obtener el HTML dentro de una etiqueta, puede hacer algo como esto:

Fragmento HTML:

<p><b>This is some text</b></p>

jQuery:

var txt = $('p').html(); // Value of text is <b>This is some text</b>

La mejor manera de averiguar qué propiedades y métodos están disponibles para un nodo HTML (objeto) es hacer algo como:

console.log($("#my-node"));

Desde jQuery 1.6+ puede simplemente usar externalHTML para incluir las etiquetas HTML en su salida de cadena:

var node = $("#my-node").outerHTML;

jQuery está aquí, así que:

jQuery.fn.goodOLauterHTML= function() {
    return $('<a></a>').append( this.clone() ).html();
}

Devuelve todo ese contenido HTML:

$('div' /*elys with HTML text stuff that you want */ ).goodOLauterHTML(); // alerts tags and all

Esto parece funcionar bien para mí:

$("#id")[0].outerHTML

La respuesta aceptada no cubre los nodos de texto (se imprime indefinido).

Este fragmento de código lo resuelve:

var htmlElements = $('<p><a href="http://google.com">google</a></p>↵↵<p><a href="http://bing.com">bing</a></p>'),
    htmlString = '';
    
htmlElements.each(function () {
    var element = $(this).get(0);

    if (element.nodeType === Node.ELEMENT_NODE) {
        htmlString += element.outerHTML;
    }
    else if (element.nodeType === Node.TEXT_NODE) {
        htmlString += element.nodeValue;
    }
});

alert('String html: ' + htmlString);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

No es necesario clonar y agregar al DOM para usar .html (), puede hacer:

$('#item-of-interest').wrap('<div></div>').html()

Es posible utilizar la función de utilidad jQuery.makeArray (obj) :

var obj = $('<p />',{'class':'className'}).html('peekaboo');
var objArr = $.makeArray(obj);
var plainText = objArr[0];

Si desea stringificar un elemento HTML para pasarlo a algún lugar y analizarlo nuevamente a un elemento, intente crear una consulta única para el elemento:

// 'e' is a circular object that can't be stringify
var e = document.getElementById('MyElement')

// now 'e_str' is a unique query for this element that can be stringify 
var e_str = e.tagName
  + ( e.id != "" ? "#" + e.id : "")
  + ( e.className != "" ? "." + e.className.replace(' ','.') : "");

//now you can stringify your element to JSON string
var e_json = JSON.stringify({
  'element': e_str
})

que

//parse it back to an object
var obj = JSON.parse( e_json )

//finally connect the 'obj.element' varible to it's element
obj.element = document.querySelector( obj.element )

//now the 'obj.element' is the actual element and you can click it for example:
obj.element.click();
new String(myobj)

Si desea serializar todo el objeto en cadena, use JSON .

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top