Objetivo:
Usando jQuery, estoy tratando de reemplazar todas las apariciones de:
<code> ... </code>
con:
<pre> ... </pre>
Mi solución:
Llegué tan lejos como lo siguiente,
$('code').replaceWith( "<pre>" + $('code').html() + "</pre>" );
El problema con mi solución:
pero el problema es que está reemplazando todo entre las etiquetas de "código" (segunda, tercera, cuarta, etc.) con el contenido entre las primeras etiquetas de "código".
p.ej
<code> A </code>
<code> B </code>
<code> C </code>
se convierte en
<pre> A </pre>
<pre> A </pre>
<pre> A </pre>
Creo que necesito usar "esto" y algún tipo de función, pero me temo que todavía estoy aprendiendo y realmente no entiendo cómo armar una solución.
Respuestas:
Puede pasar una función a
.replaceWith
[docs] :Dentro de la función, se
this
refiere alcode
elemento procesado actualmente .MANIFESTACIÓN
Actualización: No hay una gran diferencia de rendimiento , pero en caso de que los
code
elementos tengan otros elementos secundarios HTML, agregar los elementos secundarios en lugar de serializarlos parece más correcto:fuente
.each
está haciendo).Esto es mucho mejor:
Aunque es cierto que la solución de Felix Kling es aproximadamente el doble de rápida :
fuente
$('code').children()
devolverá un objeto jQuery vacío para el ejemplo anterior, porque loscode
elementos no tienen nodos de elementos secundarios. Aunque funciona si hay elementos secundarios.children()
no funcionará. Usar en sucontents()
lugar funciona perfectamente. jsfiddle.net/7Yne9unwrap
elimina el padre y agrega los hijos al árbol, loswrap
separa de nuevo y agrega un nuevo padre.Es correcto que siempre obtendrás el
code
contenido del primero , porque$('code').html()
siempre hará referencia al primer elemento, donde sea que lo uses.En su lugar, puede usar
.each
para iterar sobre todos los elementos y cambiar cada uno individualmente:fuente
Prueba esto:
http://jsfiddle.net/mTGhV/
fuente
¿Qué tal esto?
fuente
Construyendo sobre la respuesta de Felix.
Esto reproducirá los atributos de las
code
etiquetas en el reemplazo.pre
etiquetas de .Editar: esto reemplazará incluso las
code
etiquetas que están dentroinnerHTML
de otrascode
etiquetas.fuente
A partir de jQuery 1.4.2:
A continuación, puede seleccionar los nuevos elementos:
Fuente: http://api.jquery.com/replaceWith/#comment-45493689
jsFiddle: http://jsfiddle.net/k2swf/16/
fuente
Si estuviera usando JavaScript vainilla, haría lo siguiente:
Aquí está jQuery equivalente de este proceso:
Aquí está la URL de jsperf:
http://jsperf.com/substituting-one-tag-for-another-with-jquery/7
PD: Todas las soluciones que usan
.html()
o.innerHTML
son destructivas .fuente
Otra forma corta y fácil:
fuente
Mejor y limpia manera.
fuente
Puede usar la función html de jQuery. A continuación se muestra una muestra que reemplaza una etiqueta de código con una preetiqueta conservando todos los atributos del código.
Esto podría funcionar con cualquier conjunto de etiquetas de elementos html que debían intercambiarse conservando todos los atributos de la etiqueta anterior.
fuente
jquery
Complemento hecho , manteniendo los atributos también.Uso:
fuente
Todas las respuestas dadas aquí asumen (como indica el ejemplo de pregunta) que no hay atributos en la etiqueta. Si la respuesta aceptada se ejecuta en esto:
si será reemplazado con
¿Qué sucede si también desea conservar los atributos, que es lo que significaría reemplazar una etiqueta ...? Esta es la solucion:
fuente
content.html( this.html )