Zauważyłem, że pierwsza odpowiedź nie była tym, czego potrzebowałem, więc wprowadziłem kilka modyfikacji i pomyślałem, że wrzucę ją tutaj.
Ulepszony replaceTag(<tagName>)
replaceTag(<tagName>, [withDataAndEvents], [withDataAndEvents])
Argumenty:
- tagName: String
- Nazwa tagu, np. „Div”, „span” itp.
- withDataAndEvents: Boolean
- „Wartość logiczna wskazująca, czy procedury obsługi zdarzeń powinny być kopiowane wraz z elementami. Od wersji jQuery 1.4 dane elementu również zostaną skopiowane”. info
- deepWithDataAndEvents: Boolean ,
- Wartość logiczna wskazująca, czy programy obsługi zdarzeń i dane dla wszystkich elementów podrzędnych sklonowanego elementu powinny zostać skopiowane. Domyślnie jego wartość jest zgodna z wartością pierwszego argumentu (domyślnie false). ” Info
Zwroty:
Nowo utworzony element jQuery
W porządku, wiem, że jest tu teraz kilka odpowiedzi, ale postanowiłem napisać to ponownie.
Tutaj możemy zastąpić tag w ten sam sposób, w jaki używamy klonowania. Jesteśmy po tej samej składni jak .clone () z withDataAndEventsi deepWithDataAndEventsktóry skopiuj dzieci- dane i wydarzenia węzłami, jeżeli są stosowane.
Przykład:
$tableRow.find("td").each(function() {
$(this).clone().replaceTag("li").appendTo("ul#table-row-as-list");
});
Źródło:
$.extend({
replaceTag: function (element, tagName, withDataAndEvents, deepWithDataAndEvents) {
var newTag = $("<" + tagName + ">")[0];
$.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) {
return this.map(function() {
return jQuery.replaceTag(this, tagName, withDataAndEvents, deepWithDataAndEvents);
})
}
})
Zwróć uwagę, że nie zastępuje to wybranego elementu, ale zwraca nowo utworzony.