Objectif:
En utilisant jQuery, j'essaye de remplacer toutes les occurrences de:
<code> ... </code>
avec:
<pre> ... </pre>
Ma solution:
Je suis allé jusqu'à ce qui suit,
$('code').replaceWith( "<pre>" + $('code').html() + "</pre>" );
Le problème avec ma solution:
mais le problème est qu'il remplace tout ce qui se trouve entre les balises "code" (deuxième, troisième, quatrième, etc.) par le contenu entre les premières balises "code".
par exemple
<code> A </code>
<code> B </code>
<code> C </code>
devient
<pre> A </pre>
<pre> A </pre>
<pre> A </pre>
Je pense que j'ai besoin d'utiliser «ceci» et une sorte de fonction, mais j'ai peur d'apprendre encore et de ne pas vraiment comprendre comment reconstituer une solution.
Réponses:
Vous pouvez transmettre une fonction à
.replaceWith
[docs] :À l'intérieur de la fonction,
this
fait référence à l'code
élément actuellement traité .DEMO
Mise à jour: il n'y a pas de grande différence de performances , mais dans le cas où les
code
éléments ont d'autres enfants HTML, ajouter les enfants au lieu de les sérialiser semble plus correct:la source
.each
fait).C'est beaucoup plus agréable:
Certes, la solution de Felix Kling est environ deux fois plus rapide :
la source
$('code').children()
retournera un objet jQuery vide pour l'exemple ci-dessus, car lescode
éléments n'ont pas de nœuds d'élément enfant. Bien que cela fonctionne s'il y a des éléments enfants.children()
ne fonctionnera pas. Utiliser à lacontents()
place fonctionne parfaitement. jsfiddle.net/7Yne9unwrap
supprime le parent et ajoute les enfants à l'arborescence, leswrap
détache à nouveau et ajoute un nouveau parent.Il est vrai que vous obtiendrez toujours le
code
contenu du premier , car il$('code').html()
fera toujours référence au premier élément, où que vous l'utilisiez.Au lieu de cela, vous pouvez utiliser
.each
pour itérer sur tous les éléments et modifier chacun individuellement:la source
Essaye ça:
http://jsfiddle.net/mTGhV/
la source
Que dis-tu de ça?
la source
S'appuyant sur la réponse de Felix.
Cela reproduira les attributs des
code
balises dans lespre
balises de remplacement .Modifier: Cela remplacera même les
code
balises qui se trouvent à l'intérieurinnerHTML
des autrescode
balises.la source
À partir de jQuery 1.4.2:
Vous pouvez ensuite sélectionner les nouveaux éléments:
Source: http://api.jquery.com/replaceWith/#comment-45493689
jsFiddle: http://jsfiddle.net/k2swf/16/
la source
Si vous utilisiez du JavaScript vanille, vous:
Voici l'équivalent jQuery de ce processus:
Voici l'URL jsperf:
http://jsperf.com/substituting-one-tag-for-another-with-jquery/7
PS: Toutes les solutions qui utilisent
.html()
ou.innerHTML
sont destructives .la source
Un autre moyen court et facile:
la source
Meilleure et propre manière.
la source
Vous pouvez utiliser la fonction html de jQuery. Voici un exemple qui remplace une balise de code par une balise pré tout en conservant tous les attributs du code.
Cela pourrait fonctionner avec n'importe quel ensemble de balises d'élément html qui devaient être permutées tout en conservant tous les attributs de la balise précédente.
la source
Fait
jquery
plug - in, en maintenant les attributs aussi.Usage:
la source
Toutes les réponses données ici supposent (comme l'indique l'exemple de question) qu'il n'y a aucun attribut dans la balise. Si la réponse acceptée est exécutée sur ceci:
si sera remplacé par
Que faire si vous souhaitez également conserver les attributs - ce que signifierait le remplacement d'une balise ...? Voici la solution:
la source
content.html( this.html )