ฉันสังเกตว่าคำตอบแรกไม่ตรงกับที่ฉันต้องการดังนั้นฉันจึงทำการปรับเปลี่ยนสองสามอย่างและคิดว่าฉันจะโพสต์กลับที่นี่
ปรับปรุง replaceTag(<tagName>)
replaceTag(<tagName>, [withDataAndEvents], [withDataAndEvents])
อาร์กิวเมนต์:
- tagName: สตริง
- ชื่อแท็กเช่น "div" "span" เป็นต้น
- withDataAndEvents: บูลีน
- "บูลีนที่ระบุว่าควรคัดลอกตัวจัดการเหตุการณ์พร้อมกับองค์ประกอบหรือไม่ในขณะที่ jQuery 1.4 ข้อมูลองค์ประกอบจะถูกคัดลอกด้วย" ข้อมูล
- deepWithDataAndEvents: บูลีน ,
- บูลีนที่ระบุว่าควรคัดลอกตัวจัดการเหตุการณ์และข้อมูลสำหรับชายด์ทั้งหมดขององค์ประกอบที่โคลนหรือไม่ โดยค่าเริ่มต้นค่าจะตรงกับค่าของอาร์กิวเมนต์แรก (ซึ่งค่าเริ่มต้นเป็นเท็จ) " ข้อมูล
ผลตอบแทน:
องค์ประกอบ jQuery ที่สร้างขึ้นใหม่
โอเคฉันรู้ว่ามีคำตอบอยู่สองสามข้อที่นี่ แต่ฉันเอามันมาเขียนอีกครั้ง
ที่นี่เราสามารถแทนที่แท็กด้วยวิธีเดียวกับที่เราใช้การโคลน เรามีดังต่อไปนี้เช่นเดียวกับไวยากรณ์.clone ()ด้วยwithDataAndEvents
และdeepWithDataAndEvents
ที่คัดลอกเด็กข้อมูลโหนดและเหตุการณ์ที่เกิดขึ้นหากมีการใช้
ตัวอย่าง:
$tableRow.find("td").each(function() {
$(this).clone().replaceTag("li").appendTo("ul#table-row-as-list");
});
ที่มา:
$.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);
})
}
})
โปรดทราบว่าสิ่งนี้ไม่ได้แทนที่องค์ประกอบที่เลือก แต่จะส่งคืนองค์ประกอบที่สร้างขึ้นใหม่