jQuery mendapatkan html wadah termasuk wadah itu sendiri

156

Bagaimana cara mendapatkan html di '#container' termasuk '#container' dan bukan hanya apa yang ada di dalamnya.

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

Saya punya ini yang mendapatkan html di dalam #container. itu tidak termasuk elemen #container itu sendiri. Itulah yang ingin saya lakukan

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

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

Kelingking
sumber
Anda bisa meletakkan wadah di dalam wadah lain dan mendapatkan wadah itu html ... tapi itu agak sedikit membingungkan. mungkin jika kita tahu sedikit tentang masalahnya, kita bisa menemukan solusi yang bisa diterapkan? apa yang kamu lakukan dengan area teks yang penuh dengan html?
Patricia
duplikat yang mungkin dari HTML luar elemen yang dipilih
Ian Mackinnon

Jawaban:

160

Jika Anda membungkus wadah dalam Ptag dummy Anda akan mendapatkan HTML wadah juga.

Yang perlu Anda lakukan adalah

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

Lihat contoh kerja di http://jsfiddle.net/rzfPP/68/

Untuk unwrap()itu <p>tag bila dilakukan, Anda dapat menambahkan

$('#container').unwrap();
Hussein
sumber
19
@ mc10 kita cukup menggunakan clone () dan Anda tidak perlu khawatir tentang elemen tambahan yang dibuat. var x = $('#container').clone().wrap('<p/>').parent().html();. Gagasan bungkus sangat bagus dan tidak terlalu rumit daripada sebagian besar solusi yang disediakan.
Pinkie
Masalah Firefox sudah kedaluwarsa, jadi saya sarankan untuk memilih jawaban @MikeM karena murni dalam JS.
Rob
6
Kenapa harus <p>tag? Bukankah <div>lebih masuk akal?
Martin Burch
6
Ini memiliki solusi yang lebih sederhana. Lihat jawaban saya.
1.44mb
132
var x = $('#container').get(0).outerHTML;

UPDATE : Ini sekarang didukung oleh Firefox pada FireFox 11 (Maret 2012)

Seperti yang telah ditunjukkan orang lain, ini tidak akan berfungsi di FireFox. Jika Anda membutuhkannya untuk bekerja di FireFox, maka Anda mungkin ingin melihat jawaban atas pertanyaan ini: Di jQuery, apakah ada fungsi yang mirip dengan html () atau teks () tetapi mengembalikan seluruh konten komponen yang cocok?

ShaneBlake
sumber
6
Ini berfungsi di Firefox, dan ini lebih baik daripada solusi yang diterima seperti sekarang.
luqita
ini adalah cara yang elegan untuk melakukan itu, lebih baik daripada jawaban yang diterima yang hanya hack kotor
minhajul
Ini sempurna.
Gaurav Aggarwal
ini adalah jawaban yang sempurna karena membungkus tag induk dengan div atau p adalah ide yang buruk. mungkin css Anda akan rusak. khususnya ketika Anda menggunakan bootstrap (mis. form-row). maka jawaban ini cukup baik.
Sudhir K Gupta
73

Saya suka menggunakan ini;

$('#container').prop('outerHTML');
1,44mb
sumber
7
Ini sepertinya solusi terbaik bagi saya, tidak memerlukan manipulasi dom, atau manipulasi dom semu (metode bungkus). Dan objek jquery sudah memiliki properti.
Nieminen
1
cinta solusi ini
Sameera Kumarasingha
69
var x = $('#container')[0].outerHTML;
MikeM
sumber
1
Masalah Firefox sudah kedaluwarsa, jadi saya sarankan untuk memilih jawaban ini.
Rob
1
Menggunakan .clone () berfungsi, tapi ini jauh lebih bersih, imo. Jawaban yang diterima menciptakan elemen baru di DOM = buruk.
pete
13
$('#container').clone().wrapAll("<div/>").parent().html();

Pembaruan: outerHTML berfungsi di firefox sekarang jadi gunakan jawaban lain kecuali Anda perlu mendukung versi firefox yang sangat lama

Robert Noack
sumber
Properti outerHTML tidak berfungsi di Firefox sehingga Anda perlu melakukannya dengan klon
Robert Noack
2

Oldie tapi goldie ...

Karena pengguna meminta jQuery, saya akan membuatnya tetap sederhana:

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

Biola di sini.

Prinsen
sumber
2
Ini tidak membantu dalam mengambil html wadah itu sendiri. Bahkan tidak mengembalikan kode html. Saya dapat melihat bahwa mungkin praktis untuk mengakses node target melalui klon untuk menghindari mengubah dom, tetapi kemudian akan lebih baik untuk menyebutkan mengapa Anda menggunakan metode ini.
AeonOfTime
0

Firefox tidak mendukung outerHTML , jadi Anda perlu mendefinisikan fungsi untuk membantu mendukungnya:

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

Kemudian, Anda dapat menggunakan outerHTML:

var x = outerHTML($('#container').get(0));
$('#save').val(x);
kevinji
sumber
0
var x = $($('div').html($('#container').clone())).html();
kei
sumber
6
Anda membuat 3 objek jquery dalam satu pernyataan. Meskipun bekerja, itu adalah kerja keras.
Pinkie
-2

Solusi sederhana dengan contoh:

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

Pindahkan DIV ini ke DIV lain dengan id = "other_div_id"

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

Selesai

hassane86
sumber
OP meminta HTML mentah yang diwakili oleh objek jQuery, tempat metode ini memindahkan objek jQuery dari satu tempat ke tempat lain.
Simon Robb