110 votes

Utilisation de jQuery pour remplacer une étiquette avec un autre

a un dilemme, j'ai été en espérant que vous les gens pourraient m'aider...

 

objectif:

À l'aide de jQuery, je suis en train de remplacer toutes les occurrences de:

<code> ... </code>

avec:

<pre> ... </pre>

 

ma solution:

J'ai eu aussi loin que la suivante,

$('code').replaceWith( "<pre>" + $('code').html() + "</pre>" );

 

le problème avec ma solution:

mais le problèmes c'est que c'est le remplacement de tout ce qui est entre le (deuxième, troisième, quatrième, etc)"code" tags avec le contenu entre le premier "code" balises.

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 "ce" et une sorte de fonction, mais je crains que je suis encore en apprentissage et je ne comprends pas vraiment comment morceau une solution ensemble.

Merci pour votre temps et votre aide! :)

Jon

167voto

Felix Kling Points 247451

Vous pouvez passer d'une fonction à l' .replaceWith [docs]:

$('code').replaceWith(function(){
    return $("<pre />", {html: $(this).html()});
});

L'intérieur de la fonction, this se réfère à la actuellement traitée code élément.

DÉMO

Mise à jour: Il n'y a pas de grosse différence de performances, mais dans le cas où l' code éléments HTML les enfants, en ajoutant les enfants au lieu de sérialisation d'eux se sent pour être plus correct:

$('code').replaceWith(function(){
    return $("<pre />").append($(this).contents());
});

83voto

Jens Roland Points 19171

C’est beaucoup plus agréable :

Mais il est vrai que solution de Felix Kling est environ deux fois plus vite:

26voto

pimvdb Points 66332

Il est exact que vous obtiendrez toujours le premier de contenu, parce que fera toujours référence au premier élément, où que vous l’utilisez.

Au lieu de cela, vous pouvez utiliser `` pour itérer sur tous les éléments et modifier chacun d’eux individuellement :

12voto

Kokos Points 4718

Essayez ceci :

http://jsfiddle.net/mTGhV/

12voto

Tae-Sung Shin Points 4157
Vraiment ?

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X