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.