Saya perhatikan bahwa jawaban pertama bukanlah yang saya butuhkan, jadi saya membuat beberapa modifikasi dan berpikir saya akan mempostingnya kembali ke sini.
Ditingkatkan replaceTag(<tagName>)
replaceTag(<tagName>, [withDataAndEvents], [withDataAndEvents])
Argumen:
- tagName: String
- Nama tag misalnya "div", "span", dll.
- withDataAndEvents: Boolean
- "Boolean yang menunjukkan apakah event handler harus disalin bersama dengan elemen. Pada jQuery 1.4, data elemen akan disalin juga." info
- deepWithDataAndEvents: Boolean ,
- Boolean yang menunjukkan apakah event handler dan data untuk semua anak dari elemen yang dikloning harus disalin. Secara default nilainya sesuai dengan nilai argumen pertama (yang default ke false)." Info
Pengembalian:
Elemen jQuery yang baru dibuat
Oke, saya tahu ada beberapa jawaban di sini sekarang, tetapi saya mengambil sendiri untuk menulis ini lagi.
Di sini kita dapat mengganti tag dengan cara yang sama seperti kita menggunakan kloning. Kami mengikuti sintaksis yang sama dengan .clone () dengan withDataAndEventsdan deepWithDataAndEventsyang menyalin data dan kejadian node anak jika digunakan.
Contoh:
$tableRow.find("td").each(function() {
$(this).clone().replaceTag("li").appendTo("ul#table-row-as-list");
});
Sumber:
$.extend({
replaceTag: function (element, tagName, withDataAndEvents, deepWithDataAndEvents) {
var newTag = $("<" + tagName + ">")[0];
// From [Stackoverflow: Copy all Attributes](http://stackoverflow.com/a/6753486/2096729)
$.each(element.attributes, function() {
newTag.setAttribute(this.name, this.value);
});
$(element).children().clone(withDataAndEvents, deepWithDataAndEvents).appendTo(newTag);
return newTag;
}
})
$.fn.extend({
replaceTag: function (tagName, withDataAndEvents, deepWithDataAndEvents) {
// Use map to reconstruct the selector with newly created elements
return this.map(function() {
return jQuery.replaceTag(this, tagName, withDataAndEvents, deepWithDataAndEvents);
})
}
})
Perhatikan bahwa ini tidak menggantikan elemen yang dipilih, ini mengembalikan elemen yang baru dibuat.