comment faire pour modifier un type d'élément à l'aide de jquery
J'ai le code suivant
<b class="xyzxterms" style="cursor: default; ">bryant keil bio</b>
Comment pourrais-je remplacer le b
balise à un h1
tag, mais gardez tous les autres attributs et de l'information?
- Voir stackoverflow.com/questions/918792/...
- Cela n'empêche pas les attributs.
Vous devez vous connecter pour publier un commentaire.
Voici un moyen que vous pourriez le faire avec jQuery:
Exemple: http://jsfiddle.net/yapHk/
Mise à jour, voici un plugin:
Exemple: http://jsfiddle.net/mmNNJ/
$("<h1 />", attrs).append($(this).children());
. Cela permettrait aussi de conserver toutes les données et les gestionnaires d'événements attachés aux nœuds enfants.children
n'ai pas de travail maiscontents
fait..contents()
, j'ai oublié les nœuds de texte."b"
à"b.class
". Une seconde et je vais l'envelopper dans un plugin.$("b.class").changeElementType("h1");
(function($) { ... })(jQuery)
.each
bloc comme une réponse ci-dessous montre trop.Pas sûr à propos de jQuery. Avec du JavaScript que vous pouvez faire:
DÉMO
Pas sûr de la façon de la croix-navigateur compatible, c'est bien.
Une variation pourrait être:
Pour plus d'informations, voir
Nœud.les attributs
[MDN].while(child = child.nextSibling)
a échoué. Merci!@jakov et @Andrew Whitaker
Voici une poursuite de l'amélioration de sorte qu'il peut gérer plusieurs éléments à la fois.
@Jazzbo la réponse de renvoyé l'objet jQuery contenant un tableau de jQuery objets, ce qui n'est pas chainable. Je l'ai changé de sorte qu'elle retourne un objet de plus en plus semblables à ce que l' $.chacun aurait retourné:
(Également fait un peu de nettoyage de code de sorte qu'il passe jslint.)
each
boucle).Seule façon que je peux penser à est de tout copier à la main: exemple jsfiddle
HTML
Jquery/Javascript
@Andrew Whitaker: je vous propose ce changement:
Ensuite, vous pouvez faire des choses comme:
$('<div>blah</div>').changeElementType('pre').addClass('myclass');
J'aime l'idée de @AndrewWhitaker et autres, d'utiliser un plugin jQuery -- ajout de la
changeElementType()
méthode. Mais un plugin est comme une blackbox, pas de mater sur le code, si il est petit et fonctionne très bien... Donc, la performance est nécessaire, et il est plus important que le code."Javascript" ont de meilleures performances que jQuery: je pense que @FelixKling du code ont de meilleures performances que @AndrewWhitaker et d'autres.
Ici un "pur Javavascript" (et "pure DOM") du code, encapsulé dans un plugin jQuery:
Voici une méthode que j'utilise pour remplacer les balises html dans jquery:
Avec
jQuery
sans itération sur les attributs:La
replaceElem
méthode ci-dessous accepteold Tag
,new Tag
etcontext
et exécute le remplacement avec succès:JS:
CSS:
HTML:
Bonne Chance...
Javascript solution
Copier les attributs de l'ancien élément de l'élément nouveau
Remplacer l'ancien élément avec l'élément nouveau
map
crée un nouveau inutilisés tableau, il pourrait être remplacé parforEach
.Voici ma version. C'est essentiellement @fiskhandlarn, mais plutôt que de construire un nouvel objet jQuery, il remplace simplement les éléments anciens avec le nouvellement créés, donc pas de fusion est nécessaire.
Démonstration: http://jsfiddle.net/0qa7wL1b/