Objetivo:
Usando jQuery, estou tentando substituir todas as ocorrências de:
<code> ... </code>
com:
<pre> ... </pre>
Minha solução:
Eu cheguei até o seguinte,
$('code').replaceWith( "<pre>" + $('code').html() + "</pre>" );
O problema com minha solução:
mas o problema é que ele está substituindo tudo entre as (segunda, terceira, quarta, etc) tags de "código" pelo conteúdo entre as primeiras tags de "código".
por exemplo
<code> A </code>
<code> B </code>
<code> C </code>
torna-se
<pre> A </pre>
<pre> A </pre>
<pre> A </pre>
Acho que preciso usar "isso" e algum tipo de função, mas ainda estou aprendendo e não entendo realmente como montar uma solução.
javascript
jquery
replace
Jon
fonte
fonte
Respostas:
Você pode passar uma função para
.replaceWith
[documentos] :Dentro da função,
this
refere-se aocode
elemento processado atualmente .DEMO
Atualização: não há grande diferença de desempenho , mas caso os
code
elementos tenham outros filhos HTML, anexar os filhos em vez de serializá-los parece ser mais correto:fonte
.each
está fazendo).Isso é muito melhor:
Embora reconhecidamente a solução de Felix Kling seja aproximadamente duas vezes mais rápida :
fonte
$('code').children()
retornará um objeto jQuery vazio para o exemplo acima, porque oscode
elementos não têm nós de elemento filho. Embora funcione se houver elementos filho.children()
não funciona. Usar emcontents()
vez disso funciona perfeitamente. jsfiddle.net/7Yne9unwrap
remove o pai e adiciona os filhos à árvore,wrap
desanexa-os novamente e adiciona um novo pai.É correto que você obterá sempre o
code
conteúdo do primeiro , pois$('code').html()
sempre se referirá ao primeiro elemento, onde quer que o use.Em vez disso, você pode usar
.each
para iterar todos os elementos e alterar cada um individualmente:fonte
Experimente isto:
http://jsfiddle.net/mTGhV/
fonte
Que tal agora?
fonte
Construindo a resposta de Felix.
Isso reproduzirá os atributos das
code
tags naspre
tags de substituição .Editar: Isso substituirá até mesmo as
code
tags que estão dentroinnerHTML
de outrascode
tags.fonte
A partir do jQuery 1.4.2:
Você pode então selecionar os novos elementos:
Fonte: http://api.jquery.com/replaceWith/#comment-45493689
jsFiddle: http://jsfiddle.net/k2swf/16/
fonte
Se você estivesse usando o JavaScript vanilla, você:
Aqui está o equivalente em jQuery deste processo:
Aqui está o URL do jsperf:
http://jsperf.com/substituting-one-tag-for-another-with-jquery/7
PS: Todas as soluções que usam
.html()
ou.innerHTML
são destrutivas .fonte
Outra maneira curta e fácil:
fonte
Maneira melhor e limpa.
fonte
Você pode usar a função html do jQuery. Abaixo está um exemplo que substitui uma tag de código por uma tag pre, mantendo todos os atributos do código.
Isso poderia funcionar com qualquer conjunto de tags de elemento html que precisassem ser trocadas enquanto retinham todos os atributos da tag anterior.
fonte
jquery
Plugin feito , mantendo também atributos.Uso:
fonte
Todas as respostas fornecidas aqui presumem (como indica o exemplo da pergunta) que não há atributos na tag. Se a resposta aceita for executada neste:
se será substituído por
E se você quiser manter os atributos também - que é o que significaria substituir uma tag ...? Esta é a solução:
fonte
content.html( this.html )