Я заметил, что первый ответ был не совсем тем, что мне нужно, поэтому я внес пару изменений и решил, что отправлю его сюда.
Улучшенный replaceTag(<tagName>)
replaceTag(<tagName>, [withDataAndEvents], [withDataAndEvents])
Аргументы:
- tagName: Строка
- Имя тега, например, «div», «span» и т. Д.
- withDataAndEvents: Boolean
- «Логическое значение, указывающее, следует ли копировать обработчики событий вместе с элементами. Начиная с jQuery 1.4, данные элементов также будут скопированы». Информация
- deepWithDataAndEvents: Boolean ,
- Логическое значение, указывающее, следует ли копировать обработчики событий и данные для всех дочерних элементов клонированного элемента. По умолчанию его значение совпадает со значением первого аргумента (по умолчанию false). " Info
Возвращает:
Недавно созданный элемент 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);
})
}
})
Обратите внимание, что это не заменяет выбранный элемент, а возвращает вновь созданный.