Estoy tratando de obtener el texto interno de la cadena HTML, usando una función JS (la cadena se pasa como argumento). Aquí está el código:
function extractContent(value) { var content_holder = ""; for (var i = 0; i < value.length; i++) { if (value.charAt(i) === '>') { continue; while (value.charAt(i) != '<') { content_holder += value.charAt(i); } } } console.log(content_holder); } extractContent("<p>Hello</p><a href='http://w3c.org'>W3C</a>"); El problema es que no se imprime nada en la console(*content_holder* stays empty) . Creo que el problema es causado por el operador === .
Cree un elemento, almacene el HTML en él y obtenga su textContent :
function extractContent(s) { var span = document.createElement('span'); span.innerHTML = s; return span.textContent || span.innerText; }; alert(extractContent("<p>Hello</p><a href='http://w3c.org'>W3C</a>"));Aquí hay una versión que le permite tener espacios entre nodos, aunque probablemente quiera eso solo para elementos a nivel de bloque:
function extractContent(s, space) { var span= document.createElement('span'); span.innerHTML= s; if(space) { var children= span.querySelectorAll('*'); for(var i = 0 ; i < children.length ; i++) { if(children[i].textContent) children[i].textContent+= ' '; else children[i].innerText+= ' '; } } return [span.textContent || span.innerText].toString().replace(/ +/g,' '); }; console.log(extractContent("<p>Hello</p><a href='http://w3c.org'>W3C</a>. Nice to <em>see</em><strong><em>you!</em></strong>")); console.log(extractContent("<p>Hello</p><a href='http://w3c.org'>W3C</a>. Nice to <em>see</em><strong><em>you!</em></strong>",true));Versión de una línea (más precisamente, una declaración):
function extractContent(html) { return new DOMParser() .parseFromString(html, "text/html") .documentElement.textContent; }textContext es una muy buena técnica para lograr los resultados deseados, pero a veces no queremos cargar DOM. Una solución tan simple será seguir la expresión regular:
let htmlString = "<p>Hello</p><a href='http://w3c.org'>W3C</a>" let plainText = htmlString.replace(/<[^>]+>/g, '');