Où se trouve la méthode DOM renameNode() ?
Aujourd'hui (2014), aucun navigateur ne comprend le nouvelle méthode DOM3 renameNode (voir également W3C ) vérifiez si elle fonctionne sur votre bowser : http://jsfiddle.net/k2jSm/1/
Donc, une solution DOM est laid et je ne comprends pas pourquoi ( ??) jQuery n'a pas mis en place une solution de contournement ?
algorithme DOM pur
createElement(new_name)
- copier tout le contenu dans le nouvel élément ;
- remplacer l'ancien par le nouveau en
replaceChild()
est quelque chose comme ça,
function rename_element(node,name) {
var renamed = document.createElement(name);
foreach (node.attributes as a) {
renamed.setAttribute(a.nodeName, a.nodeValue);
}
while (node.firstChild) {
renamed.appendChild(node.firstChild);
}
return node.parentNode.replaceChild(renamed, node);
}
... attendre la révision et jsfiddle ...
Algorithme jQuery
L'algorithme de @ilpoldo est un bon point de départ,
$from.replaceWith($('<'+newname+'/>').html($from.html()));
Comme d'autres l'ont dit, il faut une copie d'attribut... attendez le générique...
spécifique pour class
, préserver l'attribut voir http://jsfiddle.net/cDgpS/
Voir aussi https://stackoverflow.com/a/9468280/287948
5 votes
Dans ce cas particulier, il ne serait pas judicieux de simplement le "renommer" car
div
ne sera pas un élément valide lorsquetr
est situé.0 votes
Voir ce post pour une solution plus complète qui inclut tous les attributs : stackoverflow.com/questions/2815683/
1 votes
Vous pouvez également utiliser
display:block
pour faire untr
agir et ressembler à undiv
sans changer le nom de la balise mais vous voudriez probablementdisplay:block
ifier l'intérieurtd
également avec quelque chose commetr,tr>td{display:block}
.