Saya mencoba untuk mendapatkan HTML dari objek yang dipilih dengan jQuery. Saya mengetahui .html()
fungsinya; masalahnya adalah bahwa saya perlu HTML termasuk objek yang dipilih (baris tabel dalam kasus ini, di mana .html()
hanya mengembalikan sel di dalam baris).
Saya telah mencari-cari dan menemukan beberapa metode tipe 'peretasan' yang sangat kloning objek, menambahkannya ke div yang baru dibuat, dll, dll, tetapi ini tampaknya sangat kotor. Apakah ada cara yang lebih baik, atau apakah versi baru jQuery (1.4.2) menawarkan outerHtml
fungsionalitas apa saja ?
$('div')[0].outerHTML
.Jawaban:
Edit 2014: Pertanyaan dan balasan ini berasal dari 2010. Pada saat itu, tidak ada solusi yang lebih baik tersedia secara luas. Sekarang, banyak balasan lain yang lebih baik: Eric Hu, atau Re Capcha misalnya.
Situs ini tampaknya memiliki solusi untuk Anda: jQuery: outerHTML | Yelotofu
sumber
outerHTML
yang didukung di Firefox hanya sejak versi 11 (Maret 2012).outerHTML
adalah atribut berpemilik yang ditemukan oleh Microsoft, bukan standar W3C. (Fakta menyenangkan:innerHTML
hanya terstandarisasi sejak HTML5 )el.outerHTML || document.createElement('div').appendChild( el.cloneNode( true ) ).parentNode.innerHTML
Saya percaya bahwa saat ini (5/1/2012), semua browser utama mendukung fungsi outerHTML. Menurut saya potongan ini sudah cukup. Saya pribadi akan memilih untuk mengingat ini:
EDIT : Statistik dukungan dasar untuk
element.outerHTML
sumber
Tidak perlu menghasilkan fungsi untuk itu. Lakukan saja seperti ini:
(Ngomong-ngomong, browser Anda akan menunjukkan apa yang dicatat). Sebagian besar browser terbaru sejak sekitar 2009 memiliki fitur ini.)
Keajaibannya adalah ini pada akhirnya:
Klon berarti Anda tidak benar-benar mengganggu DOM. Jalankan tanpa itu dan Anda akan melihat
p
tag dimasukkan sebelum / sesudah semua hyperlink (dalam contoh ini), yang tidak diinginkan. Jadi, ya, gunakan.clone()
.Cara kerjanya adalah bahwa ia mengambil setiap
a
tag, membuat tiruannya dalam RAM, membungkusnya denganp
tag, mendapatkan induknya (artinyap
tag), dan kemudian mendapatkaninnerHTML
properti itu.EDIT : Mengambil saran dan mengubah
div
tag kep
tag karena kurang mengetik dan berfungsi sama.sumber
Bagaimana dengan
prop('outerHTML')
:?Dan untuk mengatur:
Ini berhasil untuk saya.
PS : Ini ditambahkan dalam jQuery 1.6 .
sumber
Perpanjang jQuery:
Dan gunakan seperti ini:
$("#myTableRow").outerHTML();
sumber
return $('<div>').append(this.clone()).html();
Itu hanya sedikit lebih to-the-point.Saya setuju dengan Arpan (13 Des 10 '5:59).
Cara dia melakukannya sebenarnya adalah cara yang jauh lebih baik untuk melakukannya, karena Anda tidak menggunakan klon. Metode klon sangat memakan waktu, jika Anda memiliki elemen anak, dan tidak ada orang lain yang peduli bahwa IE sebenarnya MEMILIKI
outerHTML
atribut (ya IE sebenarnya memiliki BEBERAPA trik yang berguna di lengannya).Tapi saya mungkin akan membuat skripnya sedikit berbeda:
sumber
clone()
dantextarea
, saya membutuhkan solusi non-kloning, dan ini tepat.outerHTML
jika tersedia, karena didukung oleh Chrome selain Internet Explorer.Untuk menjadi benar-benar jQuery-esque, Anda mungkin ingin
outerHTML()
menjadi rajin dan rajin dan memiliki perilakunya serupahhtml()
mungkin:Ini memungkinkan kita untuk menyampaikan argumen
outerHTML
, yang bisa jadifunction (index, oldOuterHTML) { }
- di mana nilai kembali akan menjadi HTML baru untuk elemen (kecualifalse
dikembalikan).Untuk informasi lebih lanjut, lihat dokumen jQuery untuk
html()
.sumber
Anda juga bisa menggunakan get (Ambil elemen DOM yang cocok dengan objek jQuery.).
misalnya:
Sebagai metode ekstensi:
Atau
Pilihan ganda dan kembalikan html luar dari semua elemen yang cocok.
kembali:
sumber
Untuk membuat plugin jQuery FULL sebagai
.outerHTML
, tambahkan skrip berikut ke file js apa saja dan sertakan setelah jQuery di header Anda:Ini akan memungkinkan Anda untuk tidak hanya mendapatkan outerHTML dari satu elemen, tetapi bahkan mendapatkan pengembalian array beberapa elemen sekaligus! dan dapat digunakan dalam kedua gaya standar jQuery seperti:
Untuk banyak elemen
Contoh cuplikan:
Tampilkan cuplikan kode
sumber
Anda juga bisa melakukannya dengan cara ini
di mana id adalah id dari elemen yang Anda cari
sumber
$("#" + id).attr("id")
sangat berlebihan. Jika Anda sudah memiliki id dalam suatu variabel, mengapa Anda menggunakan pemilih jquery untuk menarik elemen dari dom, lalu menanyakan atribut ID-nya?Saya menggunakan solusi Jessica (yang diedit oleh Josh) untuk membuat outerHTML berfungsi di Firefox. Namun masalahnya adalah bahwa kode saya rusak karena solusinya membungkus elemen menjadi DIV. Menambahkan satu baris kode lagi menyelesaikan masalah itu.
Kode berikut memberi Anda outerHTML meninggalkan pohon DOM tidak berubah.
Dan gunakan seperti ini: $ ("# myDiv"). OuterHTML ();
Semoga seseorang menemukan itu berguna!
sumber
Biola di sini: http://jsfiddle.net/ezmilhouse/Mv76a/
sumber
Jika skenario menambahkan baris baru secara dinamis, Anda dapat menggunakan ini:
.myrow
adalah nama kelas dari<tr>
. Itu membuat salinan dari baris terakhir dan menyisipkannya sebagai baris terakhir yang baru. Ini juga berfungsi di IE7 , sementara[0].outerHTML
metode ini tidak mengizinkan tugas di ie7sumber
node.cloneNode () sepertinya tidak seperti peretasan. Anda dapat mengkloning node dan menambahkannya ke elemen induk yang diinginkan, dan juga memanipulasinya dengan memanipulasi properti individual, daripada harus misalnya menjalankan ekspresi reguler di atasnya, atau menambahkannya ke DOM, kemudian memanipulasinya setelah kata.
Yang mengatakan, Anda juga bisa beralih pada atribut elemen untuk membangun representasi string HTML itu. Sepertinya ini adalah bagaimana fungsi outerHTML akan diimplementasikan adalah jQuery untuk menambahkannya.
sumber
Saya telah menggunakan solusi Volomike yang diperbarui oleh Jessica. Baru saja menambahkan tanda centang untuk melihat apakah elemen itu ada, dan membuatnya kosong jika tidak ada.
Tentu saja, gunakan seperti:
sumber
Anda dapat menemukan opsi .outerHTML () yang bagus di sini https://github.com/darlesson/jquery-outerhtml .
Tidak seperti .html () yang hanya mengembalikan konten HTML elemen, versi .outerHTML () ini mengembalikan elemen yang dipilih dan konten HTML-nya atau menggantikannya sebagai metode .replaceWith () tetapi dengan perbedaan yang memungkinkan penggantian HTML diwarisi oleh rantai.
Contoh juga bisa dilihat di URL di atas.
sumber
Perhatikan bahwa solusi Josh hanya berfungsi untuk satu elemen.
Bisa dibilang, "luar" HTML hanya benar-benar masuk akal ketika Anda memiliki satu elemen, tetapi ada situasi di mana masuk akal untuk mengambil daftar elemen HTML dan mengubahnya menjadi markup.
Memperluas solusi Josh, yang ini akan menangani banyak elemen:
Sunting: masalah lain dengan solusi Josh diperbaiki, lihat komentar di atas.
sumber
Anothe solusi serupa dengan menambahkan
remove()
objek DOM sementara.sumber
Saya telah membuat tes sederhana ini dengan outerHTML menjadi solusi tokimon (tanpa clone), dan outerHTML2 menjadi solusi jessica (clone)
dan hasilnya di browser chromium (Versi 20.0.1132.57 (0)) saya
outerHTML: 81ms
outerHTML2: 439ms
tetapi jika kita menggunakan solusi tokimon tanpa fungsi outerHTML asli (yang sekarang didukung di hampir setiap browser)
kita mendapatkan
outerHTML: 594ms
outerHTML2: 332ms
dan akan ada lebih banyak loop dan elemen dalam contoh dunia nyata, jadi kombinasi sempurna akan menjadi
jadi metode klon sebenarnya lebih cepat daripada metode wrap / unwrap
(jquery 1.7.2)
sumber
Berikut ini adalah plugin outerHTML yang sangat dioptimalkan untuk jquery: ( http://jsperf.com/outerhtml-vs-jquery-clone-hack/5 => 2 snippet kode cepat lainnya tidak kompatibel dengan beberapa browser seperti FF <11)
@Andy E => Saya tidak setuju dengan Anda. outerHMTL tidak membutuhkan pengambil DAN penyetel: jQuery sudah memberi kami 'replaceWith' ...
@mindplay => Mengapa Anda bergabung dengan semua outerHTML? jquery.html hanya mengembalikan konten HTML dari elemen PERTAMA.
(Maaf, tidak memiliki reputasi yang cukup untuk menulis komentar)
sumber
Pendek dan manis.
atau acara yang lebih manis dengan bantuan fungsi panah
atau tanpa jQuery sama sekali
atau jika Anda tidak menyukai pendekatan ini, periksa itu
sumber
Ini cukup sederhana dengan JavaScript vanilla ...
sumber
Ini bagus untuk mengubah elemen pada dom tetapi TIDAK berfungsi misalnya saat memasukkan string html ke jquery seperti ini:
Setelah beberapa manipulasi saya telah membuat fungsi yang memungkinkan di atas untuk berfungsi yaitu untuk string html:
sumber
$.html = el => $("<div>"+el+"</div>").html().trim();
sumber
Saya menemukan ini sambil mencari jawaban untuk masalah saya yaitu bahwa saya mencoba untuk menghapus baris tabel kemudian menambahkannya kembali di bagian bawah tabel (karena saya secara dinamis membuat baris data tetapi ingin menunjukkan 'Tambah Baru Rekam jenis baris di bagian bawah).
Saya memiliki masalah yang sama, yaitu mengembalikan innerHtml sehingga tidak memiliki tag TR, yang menyimpan ID baris itu dan berarti tidak mungkin mengulangi prosedur.
Jawaban yang saya temukan adalah bahwa
remove()
fungsi jquery sebenarnya mengembalikan elemen, yang dihilangkan, sebagai objek. Jadi, untuk menghapus dan menambahkan kembali baris itu sesederhana ini ...Jika Anda tidak menghapus objek tetapi ingin menyalinnya di tempat lain, gunakan
clone()
fungsi itu.sumber
Plugin jQuery sebagai singkatan untuk langsung mendapatkan seluruh elemen HTML:
Dan gunakan seperti ini:
$(".element").outerHTML();
sumber
Di mana 'x' adalah nomor simpul, dimulai dengan 0 sebagai yang pertama, harus mendapatkan simpul yang tepat yang Anda inginkan, jika Anda mencoba untuk mendapatkan yang spesifik. Jika Anda memiliki simpul anak, Anda harus benar-benar meletakkan ID pada yang Anda inginkan, hanya nol pada yang itu. Menggunakan metodologi itu dan tidak ada 'x' bekerja dengan baik untuk saya.
sumber
.html()
pada elemen yang diberikan. INI BEKERJA dan saya ingin penjelasan mengapa tidak.Solusi sederhana.
sumber
Mungkin saya tidak memahami pertanyaan Anda dengan benar, tetapi ini akan mendapatkan html elemen induk elemen yang dipilih.
Itukah yang Anda cari?
sumber