9
votes

Changer le type de nœud

Utilisation de JQuery, est-il possible de changer tous les éléments correspondants à un type différent?

Par exemple, puis-je sélectionner tous les balises A , $ ("a") et les modifier vers entrée S?


4 commentaires

Je n'ai pas essayé cela, mais ma supposition serait non. Sauf si vous voulez les modifier en les supprimant du DOM et en ajoutant de nouveaux éléments à leur place, ce qui devrait être possible.


@Brad - peut-être créer des hyperliens modifiables en ligne?


@Aroth, ah, cela aurait un sens.


@Brad - et pour les utilisateursComments


4 Réponses :


14
votes

Non, vous ne pouvez pas le changer réellement, mais vous pouvez les remplacer par un nouvel élément à l'aide du < Code> replacewith () Méthode: xxx

S'il y a des attributs que vous souhaitez conserver, vous devez les définir manuellement: xxx


3 commentaires

Tout irait bien, mais il va devoir copier sur les attributs lui-même. Pas que c'est une mauvaise chose ...


Est-ce que cela conserve la teneur en HTML interne des balises remplacées?


@esqew: Non, mais un n'a pas de contenu intérieure. Voulez-vous définir la valeur de l'entrée? Je vais mettre à jour.



-2
votes
$("a").each( function() {
    this.replaceWith( $("<input>").html( this.innerHTML() ) );
});

2 commentaires

On dirait que tu es un peu deviner des choses. Juste quelques astuces, this.replacevith (... devrait être $ (this) .replacewith (... , $ ("<< INPUT>") .html (... devrait être $ (""). Val (... , this.innerhtml () devrait être this.innerhtml .


Un élément d'entrée n'a pas de contenu, le réglage de son innerhtml peut avoir aucun effet, ni peut lancer une erreur.



16
votes

La modification d'un élément A à un élément d'entrée ne change pas le type, il modifie le tagName . Selon le DOM 2 Spécification de base , "Em> Tagname d'un élément est réadonly, donc non, vous ne pouvez pas la définir.

Cependant, vous pouvez remplacer un élément par un élément différent, à condition qu'il soit valide dans le DOM.


0 commentaires