J'ai remarqué que la première réponse n'était pas tout à fait ce dont j'avais besoin, alors j'ai fait quelques modifications et j'ai pensé que je la posterais ici.
Amélioré replaceTag(<tagName>)
replaceTag(<tagName>, [withDataAndEvents], [withDataAndEvents])
Arguments:
- tagName: Chaîne
- Le nom de la balise, par exemple "div", "span", etc.
- withDataAndEvents: Booléen
- "Un booléen indiquant si les gestionnaires d'événements doivent être copiés avec les éléments. A partir de jQuery 1.4, les données des éléments seront également copiées." Info
- deepWithDataAndEvents: Booléen ,
- Une valeur booléenne indiquant si les gestionnaires d'événements et les données de tous les enfants de l'élément cloné doivent être copiés. Par défaut, sa valeur correspond à la valeur du premier argument (qui vaut par défaut false). " Info
Retour:
Un élément jQuery nouvellement créé
D'accord, je sais qu'il y a quelques réponses ici maintenant, mais j'ai pris l'initiative d'écrire ceci à nouveau.
Ici, nous pouvons remplacer la balise de la même manière que nous utilisons le clonage. Nous suivons la même syntaxe que .clone () avec withDataAndEvents
et deepWithDataAndEvents
qui copient les données et les événements des nœuds enfants s'ils sont utilisés.
Exemple:
$tableRow.find("td").each(function() {
$(this).clone().replaceTag("li").appendTo("ul#table-row-as-list");
});
La source:
$.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);
})
}
})
Notez que cela ne remplace pas l'élément sélectionné, il renvoie celui qui vient d'être créé.