jQuery obtém html de container incluindo o próprio container


156

Como obtenho o html no '#container' incluindo '#container' e não apenas no conteúdo.

<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>

Eu tenho isso que recebe o html dentro de #container. ele não inclui o próprio elemento #container. É isso que estou procurando fazer

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

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


você pode colocar o contêiner dentro de outro contêiner e obter o contêiner html ... mas isso parece um pouco hacky. talvez se soubéssemos um pouco mais sobre o problema, poderíamos encontrar uma solução viável? o que você está fazendo com uma área de texto cheia de html?
Patricia

Respostas:


160

Se você envolver o contêiner em uma Ptag fictícia, também receberá o HTML do contêiner.

Tudo que você precisa fazer é

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

Veja o exemplo de trabalho em http://jsfiddle.net/rzfPP/68/

Para unwrap()a <p>tag quando feito, você pode adicionar

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

19
@ mc10 podemos simplesmente usar clone () e você não terá que se preocupar com elementos extras criados. var x = $('#container').clone().wrap('<p/>').parent().html();. A idéia de quebrar é ótima e menos complicada do que a maioria das soluções fornecidas.
Pinkie

A questão do Firefox está desatualizada, por isso sugiro votar na resposta do @MikeM porque está em JS puro.
Rob

6
Por que uma <p>tag? Não <div>faria mais sentido?
Martin Burch

6
Isso tem uma solução muito mais simples. Veja minha resposta.
1.44mb

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

ATUALIZAÇÃO : agora é suportado pelo Firefox a partir do FireFox 11 (março de 2012)

Como outros já apontaram, isso não funcionará no FireFox. Se você precisar que ele funcione no FireFox, poderá dar uma olhada na resposta a esta pergunta: No jQuery, existe alguma função semelhante a html () ou text (), mas retorna todo o conteúdo do componente correspondente?


6
Isso funciona no Firefox e é melhor que a solução aceita a partir de agora.
luqita

esta é uma maneira elegante de fazer isso, melhor, então a resposta aceita que era apenas um truque sujo
minhajul

Isto é perfeito.
Gaurav Aggarwal

esta é a resposta perfeita, pois agrupar a tag pai com div ou p é uma má ideia. pode ser que seu css se quebre. especialmente quando você estiver usando o bootstrap (por exemplo, linha de formulário). portanto, essa resposta é muito boa.
Sudhir K Gupta

73

Eu gosto de usar isso;

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

7
Essa parece ser a melhor solução para mim, não requer manipulação de dom ou manipulação de pseudo-dom (os métodos de quebra). E o objeto jquery já possui a propriedade
197 Nieminen

1
amo esta solução
Sameera Kumarasingha

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

1
O problema do Firefox está desatualizado, por isso sugiro que vote nesta resposta.
Rob

1
Usar .clone () funciona, mas isso é muito mais limpo, imo. A resposta aceita cria novos elementos no DOM = inválido.
pete 15/03

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

Atualização: outerHTML funciona no firefox agora, então use a outra resposta, a menos que você precise oferecer suporte a versões muito antigas do firefox


outerHTML propriedade não funciona no Firefox, então você precisa fazê-lo com clone
Robert Noack

2

Oldie but goldie ...

Como o usuário está solicitando jQuery, vou mantê-lo simples:

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

Violino aqui.


2
Isso não ajuda a recuperar o html do próprio contêiner. Ele nem retorna o código html. Percebo que pode ser prático acessar o nó de destino via clone para evitar a modificação do dom, mas seria bom mencionar por que você usa esse método.
AeonOfTime


0

O Firefox não oferece suporte a outerHTML , portanto, você precisa definir uma função para ajudá-lo:

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);
}

Em seguida, você pode usar outerHTML:

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

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

6
Você está criando 3 objetos jquery em uma instrução. Embora funcione, é um exagero.
23711 Pinkie

-2

Solução simples com um exemplo:

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

Mova este DIV para outro DIV com id = "other_div_id"

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

Terminar


O OP está solicitando o HTML bruto representado por um objeto jQuery, em que esse método move um objeto jQuery de um local para outro.
Simon Robb
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.