jQuery ottiene l'html del contenitore incluso il contenitore stesso


156

Come posso ottenere l'html su '#container' incluso '#container' e non solo cosa c'è 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>

Ho questo che ottiene l'html all'interno di #container. non include l'elemento #container stesso. Questo è quello che sto cercando di fare

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

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


potresti mettere il contenitore in un altro contenitore e ottenere quei contenitori html ... ma sembra un po 'confuso. forse se sapessimo qualcosa in più sul problema, potremmo trovare una soluzione praticabile? cosa stai facendo con un'area di testo piena di HTML?
Patricia,

Risposte:


160

Se avvolgi il contenitore in un Ptag fittizio otterrai anche il contenitore HTML.

Tutto quello che devi fare è

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

Controlla l'esempio funzionante su http://jsfiddle.net/rzfPP/68/

Per unwrap()l' <p>etichetta una volta fatto, è possibile aggiungere

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

19
@ mc10 possiamo semplicemente usare clone () e non dovrai preoccuparti degli elementi extra creati. var x = $('#container').clone().wrap('<p/>').parent().html();. L'idea di avvolgimento è ottima e molto meno complicata della maggior parte delle soluzioni fornite.
Pinkie,

Il problema di Firefox non è aggiornato, quindi suggerisco di votare la risposta di @MikeM perché è in puro JS.
Rob,

6
Perché un <p>tag? Non avrebbe <div>più senso?
Martin Burch,

6
Questa ha una soluzione molto più semplice. Vedi la mia risposta
1.44mb,

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

AGGIORNAMENTO : ora è supportato da Firefox a partire da FireFox 11 (marzo 2012)

Come altri hanno sottolineato, questo non funzionerà in FireFox. Se ne hai bisogno per funzionare in FireFox, allora potresti dare un'occhiata alla risposta a questa domanda: in jQuery, ci sono funzioni simili a html () o text () ma che restituiscono l'intero contenuto del componente corrispondente?


6
Funziona con Firefox ed è meglio della soluzione accettata fin da ora.
luqita,

questo è un modo elegante per farlo, meglio della risposta accettata che era solo un trucco sporco
minhajul,

Questo è perfetto.
Gaurav Aggarwal,

questa è la risposta perfetta perché avvolgere il tag parent con div o p è una cattiva idea. potrebbe essere il tuo css si romperà. specialmente quando si utilizza bootstrap (ad esempio form-row). quindi questa risposta è abbastanza buona.
Sudhir K Gupta,

73

Mi piace usare questo;

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

7
Questa mi sembra la soluzione migliore, non richiede manipolazione del dom o manipolazione di pseudo dom (i metodi di avvolgimento). E l'oggetto jquery ha già la proprietà.
Nieminen,

1
amo questa soluzione
Sameera Kumarasingha il

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

1
Il problema con Firefox non è aggiornato, quindi suggerisco di votare questa risposta.
Rob,

1
L'uso di .clone () funziona, ma è molto più pulito, imo. La risposta accettata crea nuovi elementi in DOM = bad.
pete,

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

Aggiornamento: outerHTML ora funziona su Firefox, quindi usa l'altra risposta a meno che non sia necessario supportare versioni molto vecchie di Firefox


La proprietà outerHTML non funziona su Firefox, quindi è necessario farlo con il clone
Robert Noack,

2

Oldie but goldie ...

Poiché l'utente richiede jQuery, lo renderò semplice:

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

Violino qui.


2
Questo non aiuta a recuperare l'html del contenitore stesso. Non restituisce nemmeno il codice HTML. Vedo che può essere pratico accedere al nodo di destinazione tramite clone per evitare di modificare il dom, ma sarebbe bene menzionare il motivo per cui si utilizza questo metodo.
AeonOfTime


0

Firefox non supporta outerHTML , quindi è necessario definire una funzione per supportarla:

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

Quindi, puoi usare outerHTML:

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

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

6
Stai creando 3 oggetti jquery in un'unica istruzione. Sebbene funzioni, è eccessivo.
Pinkie,

-2

Soluzione semplice con un esempio:

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

Sposta questo DIV su un altro DIV con id = "other_div_id"

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

finire


L'OP richiede l'HTML grezzo rappresentato da un oggetto jQuery, in cui questo metodo sposta un oggetto jQuery da una posizione a un'altra.
Simon Robb,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.