jQuery obtiene html de contenedor, incluido el contenedor en sí


156

¿Cómo obtengo el html en '#container' que incluye '#container' y no solo lo que hay dentro?

<div id="container">
 <div id="one">test 1 </div>
 <div id="two">test 2 </div>
 <div id="three">test 3 </div>
 <div id="four">test 4 </div>
</div>

Tengo esto que obtiene el html dentro de #container. no incluye el elemento #container en sí. Eso es lo que estoy buscando hacer

var x = $('#container').html();
$('#save').val(x);

Verifique http://jsfiddle.net/rzfPP/58/


podrías poner el contenedor dentro de otro contenedor y obtener esos contenedores html ... pero eso parece un poco hacky. quizás si supiéramos un poco más sobre el problema, ¿podríamos llegar a una solución viable? ¿Qué estás haciendo con un área de texto llena de HTML?
— Patricia

Respuestas:


160

Si envuelve el contenedor en una Petiqueta ficticia , también obtendrá el HTML del contenedor.

Todo lo que necesitas hacer es

var x = $('#container').wrap('<p/>').parent().html();

Consulte el ejemplo de trabajo en http://jsfiddle.net/rzfPP/68/

A unwrap()la <p>etiqueta cuando haya terminado, puede agregar

$('#container').unwrap();

19
@ mc10 simplemente podemos usar clone () y no tendrá que preocuparse por los elementos adicionales creados. var x = $('#container').clone().wrap('<p/>').parent().html();. La idea de envoltura es genial y mucho menos complicada que la mayoría de las soluciones proporcionadas.
— Pinkie

El problema de Firefox está desactualizado, así que sugiero votar la respuesta @MikeM porque está en JS puro.
— Rob

66
¿Por qué una <p>etiqueta? ¿No <div>tendría más sentido?
— Martin Burch

66
Esto tiene una solución mucho más simple. Mira mi respuesta.
— 1.44mb

132
var x = $('#container').get(0).outerHTML;

ACTUALIZACIÓN : Esto ahora es compatible con Firefox a partir de FireFox 11 (marzo de 2012)

Como otros han señalado, esto no funcionará en Firefox. Si necesita que funcione en FireFox, puede que desee echar un vistazo a la respuesta a esta pregunta: en jQuery, ¿hay alguna función similar a html () o text () pero devuelve todo el contenido del componente coincidente?


66
Esto funciona en Firefox, y es mejor que la solución aceptada a partir de ahora.
— luqita

esta es una forma elegante de hacerlo, mejor que la respuesta aceptada, que fue solo un truco sucio
— minhajul

Esto es perfecto.
— Gaurav Aggarwal

esta es la respuesta perfecta porque envolver la etiqueta principal con div o p es una mala idea. puede ser tu CSS se romperá. especialmente cuando usa bootstrap (por ejemplo, form-row). Por lo tanto, esta respuesta es bastante buena.
— Sudhir K Gupta

73

Me gusta usar esto;

$('#container').prop('outerHTML');

77
Esta parece ser la mejor solución para mí, no requiere manipulación de dom o pseudo manipulación de dom (los métodos de ajuste). Y el objeto jquery ya tiene la propiedad.
— Nieminen

1
encanta esta solución
— Sameera Kumarasingha

69
var x = $('#container')[0].outerHTML;

1
El problema de Firefox está desactualizado, así que sugiero votar esta respuesta.
— Rob

1
Usar .clone () funciona, pero esto es mucho más limpio, en mi opinión. La respuesta aceptada crea nuevos elementos en el DOM = malo.
— Peter

13
$('#container').clone().wrapAll("<div/>").parent().html();

Actualización: externalHTML funciona en Firefox ahora, así que usa la otra respuesta a menos que necesites soportar versiones muy antiguas de Firefox


La propiedad externalHTML no funciona en Firefox, por lo que debe hacerlo con clon
— Robert Noack

2

Viejo pero valioso...

Como el usuario solicita jQuery, lo voy a mantener simple:

var html = $('#container').clone();
console.log(html);

Violín aquí.


2
Esto no ayuda a recuperar el html del contenedor en sí. Ni siquiera devuelve el código html. Puedo ver que puede ser práctico acceder al nodo objetivo a través de un clon para evitar modificar el dom, pero sería bueno mencionar por qué usa este método.
— AeonOfTime


0

Firefox no es compatible con externalHTML , por lo que debe definir una función para ayudarlo:

function outerHTML(node) {
    return node.outerHTML || (
        function(n) {
            var div = document.createElement('div');
            div.appendChild( n.cloneNode(true) );
            var h = div.innerHTML;
            div = null;
            return h;
        }
    )(node);
}

Luego, puede usar outsideHTML:

var x = outerHTML($('#container').get(0));
$('#save').val(x);

0
var x = $($('div').html($('#container').clone())).html();

66
Está creando 3 objetos jquery en una declaración. Aunque funciona, es una exageración.
— Pinkie

-2

Solución simple con un ejemplo:

<div id="id_div">
  <p>content<p>
</div>

Mueva este DIV a otro DIV con id = "other_div_id"

$('#other_div_id').prepend( $('#id_div') );

Terminar


El OP está solicitando el HTML sin procesar representado por un objeto jQuery, donde este método mueve un objeto jQuery de un lugar a otro.
— Simon Robb
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.