Javascript - Eliminar contenido entre dos etiquetas HTML

Resuelto
sipherion Mensajes publicados 1836 Fecha de registro   Estado Miembro Última intervención   -  
sipherion Mensajes publicados 1836 Fecha de registro   Estado Miembro Última intervención   -
Hola, hola !

Entonces, aquí está mi pequeño problema. A pesar de las magníficas explicaciones disponibles en CCM en esta dirección https://www.commentcamarche.net/contents/585-javascript-l-objet-regexp, no consigo hacer lo que quiero en Javascript.

Recupero en Javascript el contenido HTML de un DIV de mi página. En este DIV, tengo una <table></table> que no necesito recuperar ya que corresponde a la visualización de un calendario, y busco la forma de eliminarla.

Confieso que no tengo ningún conocimiento sobre expresiones regulares y como estoy en esto desde el viernes por la tarde, estoy completamente atascado.

Mi código actual que, por supuesto, no funciona:

^[(<TABLE)].*(TABLE>)$

El objetivo final es en Javascript tener algo como:

reg = new RegExp("^[(<TABLE)].*(TABLE>)$");
document.form.message_bdd.value = document.form.message_bdd.value.replace(reg, '');

Gracias de antemano por la ayuda que puedan brindarme ;-)

--
Si su problema está resuelto, gracias por cerrar el tema haciendo clic en "Problema resuelto".
Administrador de redes en Windows Server 2003

4 respuestas

[Dal] Mensajes publicados 6122 Fecha de registro   Estado Colaborador Última intervención   1 108
 
Hola sipherion,

Puedes usar una regex en el método String replace().

Algo como esto:

<!DOCTYPE html>
<html>
<body>

<div id="demo">
<p>Haz clic en el botón para borrar la tabla</p>
<table border="1">
<tr>
<th>Lunes</th>
<th>Martes</th>
</tr>
<tr>
<td>Reservado</td>
<td>Reservado también</td>
</tr>
</table>
</div>

<button onclick="myFunction()">Borrar</button>

<script>
function myFunction()
{
var str=document.getElementById("demo").innerHTML;
var n=str.replace(/<table[\s\S]*\/table>/,"");
document.getElementById("demo").innerHTML=n;
}
</script>

</body>
</html>


Dal
1
sipherion Mensajes publicados 1836 Fecha de registro   Estado Miembro Última intervención   287
 
¡Genial, funciona de maravilla, solo me faltaba esta expresión! ¡Muchas gracias, Dal!
0
[Dal] Mensajes publicados 6122 Fecha de registro   Estado Colaborador Última intervención   1 108
 
De nada, un pequeño complemento:

La regex
/<table[\s\S]*\/table>/
coincidirá con varias tablas, si tienes varias en tu div, porque la regex irá hasta el último "/table>”. Si eso no es un problema en tu caso, está bien, de lo contrario, tendrás que hacer que coincida un poco más (¿tiene un id esta "table"?), o usar un especificador "?" como este
/<table[\s\S]*?\/table>/
en su lugar, para que la regexp sea no codiciosa (non-greedy) y coincida solo con la primera tabla (si es la que buscas).


Dal
1
sipherion Mensajes publicados 1836 Fecha de registro   Estado Miembro Última intervención   287
 
El contenido de mi DIV se transmitirá más tarde a una página que enviará un correo electrónico en formato HTML. También tengo otra tabla dentro, pero que también debe despegar, así que todo va bien ;-)
En el peor de los casos, en el futuro, ¿podría usar algo como
/(<table id='1')[\s\S]*\/table>
para identificar claramente una tabla?
0
ThEBiShOp Mensajes publicados 9307 Fecha de registro   Estado Colaborador Última intervención   1 605
 
Reitero mi pregunta: https://forums.commentcamarche.net/forum/affich-28935506-javascript-supprimer-contenu-entre-deux-balises-html#7

¿por qué molestarse con una expresión regular cuando jQuery permite manipular fácilmente cualquier elemento de la página y los elementos que contiene?
0
[Dal] Mensajes publicados 6122 Fecha de registro   Estado Colaborador Última intervención   1 108
 
@ThEBiShOp :

jQuery está bien, pero si no lo usa ya, crea una dependencia. Cuando usamos jQuery, tendemos a deformarnos y olvidar que (o no nos tomamos la molestia de preguntarnos si) podemos hacer las cosas bastante simplemente sin él.

No dijo que su tabla tuviera un id o una clase. Supuse que el div la tenía (porque dice que recupera su contenido).

Su principal objetivo era eliminar la tabla recuperada en una variable de javascript, no eliminarla en la página mostrada (para los fines de la demo, eso es lo que hace mi código para mostrar el resultado de la sustitución en la variable, pero es solo con fines de ilustración del resultado).

@sipherion : en ese caso
/(<table id='1')[\s\S]*?\/table>/


Dal

Edit : falta una barra de cierre
0
jeannets Mensajes publicados 28364 Fecha de registro   Estado Colaborador Última intervención   Ambassadeur 6 597
 
1° elimina el código HTML y las 2 etiquetas TAB y prueba en el navegador para ver si funciona bien sin estas etiquetas.

2° En este lugar inserta tu código javascript asegurándote de incluir bien las etiquetas JS..

Puedes hacer esto con una herramienta de ayuda como DreamWeaver o simplemente con el Bloc de notas.

Si necesitas soporte de JS, puedes consultar: http://www.editeurjavascript.com/cours/cours_02.php

No es muy complicado, pero no puedo hacer tu código por ti.
0
sipherion Mensajes publicados 1836 Fecha de registro   Estado Miembro Última intervención   287
 
No entiendo tu respuesta, Jeannets. ¿Crees que no tengo ningún conocimiento en programación? Lo siento si eso es lo que pensaste al leer mi mensaje, tal vez me expresé mal, pero estoy bien, me las arreglo igualmente ^^

Mi problema viene de la función RegExp. Quiero reemplazar el contenido de una variable JS que declaro recuperando el innerHTML de un DIV eliminando todo lo que está entre <table y </table>.

--
Si tu problema está resuelto, gracias por cerrar el tema haciendo clic en "Problema resuelto".
Administrador de redes en Windows Server 2003
0
jeannets Mensajes publicados 28364 Fecha de registro   Estado Colaborador Última intervención   6 597
 
Lo siento, bueno sí, pensé que estabas comenzando al leer tu post...

Y no sabré ayudarte en este punto... Es un tiro al agua.
0
ThEBiShOp Mensajes publicados 9307 Fecha de registro   Estado Colaborador Última intervención   1 605
 
Pregunta probablemente tonta, pero ¿por qué no utilizar jQuery en lugar de complicarse con una expresión regular?

<script src="http://code.jquery.com/jquery-1.9.1.js"></script>
<script>
function myFunction()
{
$('#demo table').html('');
}
</script>
0
sipherion Mensajes publicados 1836 Fecha de registro   Estado Miembro Última intervención   287
 
Gracias por tu propuesta, pero efectivamente no es pertinente aquí ;-)
0
ThEBiShOp Mensajes publicados 9307 Fecha de registro   Estado Colaborador Última intervención   1 605
 
¿Puedo preguntarte por qué?
0
sipherion Mensajes publicados 1836 Fecha de registro   Estado Miembro Última intervención   287
 
- En mi caso, el ID depende de una selección previa; de hecho, el ID se recupera a través de una variable definida por
document.form.idDivTemp.value
(lo que da
document.form.message_bdd.value = document.getElementById(document.form.idDivTemp.value).innerHTML;
)
- Esta solución solo funciona con una tabla, mientras que en esta DIV hay dos.
- Puede suceder en ciertos casos que se necesite modificar nuestra selección sin recargar la página; si eliminas el código HTML, la tabla ya no se mostrará. Por lo tanto, hay que eliminarlo en la variable temporal antes de enviarlo a la página de procesamiento.

Pero, por lo demás, funciona muy bien, he probado tu solución, me será útil en ciertos casos ;-)
0
ThEBiShOp Mensajes publicados 9307 Fecha de registro   Estado Colaborador Última intervención   1 605
 
El selector jQuery puede ser construido como mejor te parezca para manipular cualquier elemento del DOM, para eliminarlo, ocultarlo, o añadirle cualquier cosa.

Mi ejemplo se basó simplemente en la respuesta de [Dal], pero afortunadamente, se pueden hacer muchas otras cosas, y en mi opinión, es más práctico de manipular que una expresión regular.
0
sipherion Mensajes publicados 1836 Fecha de registro   Estado Miembro Última intervención   287
 
Es posible, ahora lo más sencillo para mí que aprendo JS poco a poco, es comenzar a dominar las funciones básicas y luego considerar pasar a JQuery.
0