Tujuan:
Menggunakan jQuery, saya mencoba mengganti semua kemunculan:
<code> ... </code>
dengan:
<pre> ... </pre>
Solusi saya:
Saya sampai pada yang berikut,
$('code').replaceWith( "<pre>" + $('code').html() + "</pre>" );
Masalah dengan solusi saya:
tetapi masalahnya adalah ia mengganti semua yang ada di antara tag "kode" (kedua, ketiga, keempat, dll.) dengan konten di antara tag "kode" pertama .
misalnya
<code> A </code>
<code> B </code>
<code> C </code>
menjadi
<pre> A </pre>
<pre> A </pre>
<pre> A </pre>
Saya rasa saya perlu menggunakan "ini" dan semacam fungsi, tetapi saya khawatir saya masih belajar dan tidak benar-benar memahami cara menyusun solusi bersama.
Jawaban:
Anda dapat meneruskan fungsi ke
.replaceWith
[docs] :Di dalam fungsi,
this
mengacu padacode
elemen yang sedang diproses .DEMO
Pembaruan: Tidak ada perbedaan performa yang besar , tetapi jika
code
elemen memiliki turunan HTML lain, menambahkan turunan alih-alih membuat serialisasi dirasa lebih tepat:sumber
.each
yang dilakukan).Ini jauh lebih bagus:
Meskipun memang solusi Felix Kling kira-kira dua kali lebih cepat :
sumber
$('code').children()
akan mengembalikan objek jQuery kosong untuk contoh di atas, karenacode
elemen tidak memiliki node elemen anak. Padahal itu berhasil jika ada elemen anak.children()
tidak akan berfungsi. Menggunakancontents()
malah berfungsi dengan sempurna. jsfiddle.net/7Yne9unwrap
menghapus induk dan menambahkan turunan ke pohon,wrap
melepaskannya lagi dan menambahkan induk baru.Benar bahwa Anda akan selalu mendapatkan konten pertama
code
, karena$('code').html()
akan selalu mengacu pada elemen pertama, di mana pun Anda menggunakannya.Sebaliknya, Anda dapat menggunakan
.each
untuk mengulang semua elemen dan mengubahnya satu per satu:sumber
Coba ini:
http://jsfiddle.net/mTGhV/
sumber
Bagaimana dengan ini?
sumber
Membangun jawaban Felix.
Ini akan mereproduksi atribut
code
tag dalam penggantinyapre
tag .Sunting: Ini akan menggantikan bahkan
code
tag yang ada di dalam taginnerHTML
laincode
.sumber
Mulai jQuery 1.4.2:
Anda kemudian dapat memilih elemen baru:
Sumber: http://api.jquery.com/replaceWith/#comment-45493689
jsFiddle: http://jsfiddle.net/k2swf/16/
sumber
Jika Anda menggunakan vanilla JavaScript, Anda akan:
Berikut adalah jQuery yang setara dengan proses ini:
Ini adalah URL jsperf:
http://jsperf.com/substituting-one-tag-for-another-with-jquery/7
PS: Semua solusi yang digunakan
.html()
atau.innerHTML
yang merusak .sumber
Cara singkat & mudah lainnya:
sumber
Cara terbaik dan bersih.
sumber
Anda bisa menggunakan fungsi html jQuery. Di bawah ini adalah contoh yang menggantikan tag kode dengan tag awal dengan tetap mempertahankan semua atribut kode.
Ini bisa bekerja dengan kumpulan tag elemen html apa pun yang perlu ditukar sambil mempertahankan semua atribut dari tag sebelumnya.
sumber
Membuat
jquery
plugin, juga memelihara atribut.Pemakaian:
sumber
Semua jawaban yang diberikan di sini mengasumsikan (seperti yang ditunjukkan contoh pertanyaan) bahwa tidak ada atribut di tag. Jika jawaban yang diterima dijalankan ini:
jika akan diganti dengan
Bagaimana jika Anda ingin mempertahankan atribut juga - yang artinya mengganti tag ...? Inilah solusinya:
sumber
content.html( this.html )