Ho notato che la prima risposta non era proprio ciò di cui avevo bisogno, quindi ho apportato un paio di modifiche e ho pensato di postarla di nuovo qui.
migliorata replaceTag(<tagName>)
replaceTag(<tagName>, [withDataAndEvents], [withDataAndEvents])
Argomenti:
- tagName: String
- Il nome del tag, ad esempio "div", "span", ecc.
- withDataAndEvents: Boolean
- "Un valore booleano che indica se i gestori di eventi devono essere copiati insieme agli elementi. A partire da jQuery 1.4, verranno copiati anche i dati degli elementi." Informazioni
- deepWithDataAndEvents: Boolean ,
- Un valore booleano che indica se i gestori di eventi e i dati per tutti i figli dell'elemento clonato devono essere copiati. Per impostazione predefinita, il suo valore corrisponde al valore del primo argomento (che per impostazione predefinita è false). " Info
Ritorna:
Un elemento jQuery appena creato
Ok, so che ci sono alcune risposte qui ora, ma mi sono preso la responsabilità di scriverlo di nuovo.
Qui possiamo sostituire il tag nello stesso modo in cui utilizziamo la clonazione. Stiamo seguendo la stessa sintassi di .clone () con withDataAndEvents
e deepWithDataAndEvents
che copia il figlio dati e gli eventi dei nodi se utilizzati.
Esempio:
$tableRow.find("td").each(function() {
$(this).clone().replaceTag("li").appendTo("ul#table-row-as-list");
});
Fonte:
$.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);
})
}
})
Nota che questo non sostituisce l'elemento selezionato, restituisce quello appena creato.