^^removeSpanTags

prompt: puoi scrivere una funzione in javascript che rimuova tutti i tag <span> ....</span> in coppia, e lasci il contenuto interno

 

Certo! Ecco una semplice funzione Java‑Script che

  1. prende una stringa HTML,
  2. rimuove tutti i tag <span> (sia di apertura che di chiusura) mantenendo intatto il loro contenuto interno,
  3. e restituisce la stringa risultante.

 

/**
* Rimuove tutti i tag <span>…</span> da una stringa HTML,
* lasciando invariato il contenuto interno.
*
* @param {string} html - La stringa HTML da elaborare.
* @returns {string} - La stringa senza i tag <span>.
*/
function removeSpanTags(html) {
// Crea un elemento temporaneo per sfruttare il parser HTML del browser
const container = document.createElement('div');
container.innerHTML = html;

// Trova tutti gli elementi <span> nel DOM creato
const spans = container.querySelectorAll('span');

// Per ciascun <span>, sostituiscilo con i suoi figli (testo o altri nodi)
spans.forEach(span => {
// Inserisce i figli del <span> prima del <span> stesso
while (span.firstChild) {
span.parentNode.insertBefore(span.firstChild, span);
}
// Rimuove il <span> vuoto
span.parentNode.removeChild(span);
});

// Restituisce l'HTML modificato
return container.innerHTML;
}

/* ------------------- Esempio d'uso ------------------- */
const originalHtml = `
<p>Questo è un <span>esempio</span> di testo.</p>
<div>
<span>Un altro <strong>blocco</strong> dentro lo span.</span>
<span>Span vuoto:</span>
</div>
`;

const cleanedHtml = removeSpanTags(originalHtml);
console.log(cleanedHtml);
/*
Output:
<p>Questo è un esempio di testo.</p>
<div>
Un altro <strong>blocco</strong> dentro lo span.
Span vuoto:
</div>
*/

 

Come funziona

  1. Parsing HTML – Creiamo un elemento <div> temporaneo e impostiamo innerHTML sulla stringa fornita. Il browser converte così la stringa in un albero DOM reale, rendendo più facile manipolare i nodi.
  2. Selezione dei <span> – Con querySelectorAll('span') otteniamo tutti gli elementi <span> presenti.
  3. Sostituzione – Per ogni <span> spostiamo tutti i suoi figli (che possono essere testo o altri elementi) subito prima del <span> stesso nel DOM, quindi rimuoviamo il <span> vuoto.
  4. Restituzione – Dopo aver rimosso tutti gli <span>, ritorniamo l’HTML aggiornato tramite container.innerHTML.

Questa soluzione gestisce anche casi più complessi, come <span> annidati o <span> contenenti altri elementi (ad es. <strong>, <em>). Se hai bisogno di rimuovere solo alcuni <span> in base a classi o attributi, basta aggiungere un filtro nella selezione, ad esempio:

 

// Rimuove solo <span> con classe "remove-me"
const spans = container.querySelectorAll('span.remove-me');

 

prompt: puoi completare l'esempio mostrato inserendolo in un file htlml in modo che io possa vedere visualizzato il prima e il dopo della rimoszione

 

Ecco un file HTML completo che mostra, nello stesso documento, il contenuto prima e dopo la rimozione dei tag <span>.
Apri il file con il tuo browser (ad esempio trascinandolo su una finestra di Chrome/Firefox) e vedrai due sezioni: una con il markup originale e una con il risultato della funzione removeSpanTags.

 

<!DOCTYPE html>
<html lang="it">
<head>
<meta charset="UTF-8">
<title>Rimozione dei tag &lt;span&gt;</title>
<style>
body {font-family: Arial, sans-serif; margin: 2rem;}
.section {margin-bottom: 2rem;}
.section h2 {margin-top: 0;}
pre {background:#f4f4f4; padding:1rem; overflow:auto;}
.result {border: 1px solid #ccc; padding:1rem; background:#fafafa;}
</style>
</head>
<body>

<h1>Esempio di rimozione dei tag &lt;span&gt;</h1>

<!-- ==================== Prima ==================== -->
<div class="section">
<h2>Prima (HTML originale)</h2>
<pre id="original-code">&lt;p&gt;Questo è un &lt;span&gt;esempio&lt;/span&gt; di testo.&lt;/p&gt;
&lt;div&gt;
&lt;span&gt;Un altro &lt;strong&gt;blocco&lt;/strong&gt; dentro lo span.&lt;/span&gt;
&lt;span&gt;Span vuoto:&lt;/span&gt;
&lt;/div&gt;
</pre>

<div class="result" id="original-render">
<!-- Il markup verrà inserito qui via JavaScript -->
</div>
</div>

<!-- ==================== Dopo ==================== -->
<div class="section">
<h2>Dopo (senza i tag &lt;span&gt;)</h2>
<pre id="cleaned-code"></pre>

<div class="result" id="cleaned-render">
<!-- Il risultato pulito verrà inserito qui via JavaScript -->
</div>
</div>

<script>
/**
* Rimuove tutti i tag <span>…</span> da una stringa HTML,
* lasciando intatto il contenuto interno.
*
* @param {string} html - La stringa HTML da elaborare.
* @returns {string} - La stringa senza i tag <span>.
*/
function removeSpanTags(html) {
const container = document.createElement('div');
container.innerHTML = html;

// Seleziona tutti gli <span> presenti
const spans = container.querySelectorAll('span');

spans.forEach(span => {
// Sposta i figli del <span> prima del <span> stesso
while (span.firstChild) {
span.parentNode.insertBefore(span.firstChild, span);
}
// Rimuove il <span> ora vuoto
span.parentNode.removeChild(span);
});

return container.innerHTML;
}

// ---------- Dati di esempio ----------
const originalHtml = `
<p>Questo è un <span>esempio</span> di testo.</p>
<div>
<span>Un altro <strong>blocco</strong> dentro lo span.</span>
<span>Span vuoto:</span>
</div>
`;

// Mostra il markup originale (formattato)
document.getElementById('original-code').textContent = originalHtml.trim();

// Renderizza il markup originale così da vederlo nella pagina
document.getElementById('original-render').innerHTML = originalHtml;

// Applica la funzione di pulizia
const cleanedHtml = removeSpanTags(originalHtml);

// Mostra il risultato “pulito” sia come codice che come rendering
document.getElementById('cleaned-code').textContent = cleanedHtml.trim();
document.getElementById('cleaned-render').innerHTML = cleanedHtml;
</script>

</body>
</html>

 

Come usarlo

  1. Copia tutto il codice sopra in un nuovo file, ad esempio rimuovi-span.html.
  2. Salva il file sul tuo computer.
  3. Apri il file con un browser (doppio‑click oppure trascinalo su una finestra del browser).
  4. Vedrai due sezioni:

Puoi anche modificare la variabile originalHtml nello script per provare altri esempi; la pagina aggiornerà automaticamente il risultato “prima” e “dopo”.

Se ti servono ulteriori personalizzazioni (filtri per classi, attributi, ecc.) fammelo sapere!