İlk cevabın ihtiyacım olan şey olmadığını fark ettim, bu yüzden birkaç değişiklik yaptım ve buraya geri göndereceğimi düşündüm.
Gelişmiş replaceTag(<tagName>)
replaceTag(<tagName>, [withDataAndEvents], [withDataAndEvents])
Argümanlar:
- tagName: Dize
- Etiket adı, örneğin "div", "span" vb.
- withDataAndEvents: Boole
- "Olay işleyicilerinin öğelerle birlikte kopyalanması gerekip gerekmediğini belirten bir Boole. JQuery 1.4'ten itibaren öğe verileri de kopyalanacaktır." bilgi
- deepWithDataAndEvents: Boole ,
- Klonlanan öğenin tüm alt öğeleri için olay işleyicilerinin ve verilerinin kopyalanması gerekip gerekmediğini belirten bir Boole. Varsayılan olarak değeri, ilk bağımsız değişkenin değeriyle eşleşir (varsayılan olarak yanlıştır). " Bilgi
İadeler:
Yeni oluşturulmuş bir jQuery öğesi
Tamam, şimdi burada birkaç cevap olduğunu biliyorum, ama bunu tekrar yazmayı kendime aldım.
Burada, klonlamayı kullandığımız gibi etiketi değiştirebiliriz. .Clone () ile aynı sözdizimini izliyoruzwithDataAndEvents ve alt düğümlerin verilerini ve eğer kullanılıyorsa olayları deepWithDataAndEventskopyalıyoruz .
Misal:
$tableRow.find("td").each(function() {
$(this).clone().replaceTag("li").appendTo("ul#table-row-as-list");
});
Kaynak:
$.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);
})
}
})
Bunun seçilen öğenin yerine geçmediğini , yeni oluşturulan öğeyi döndürdüğünü unutmayın.