J'essaie d'obtenir le texte interne de la chaîne HTML, en utilisant une fonction JS (la chaîne est passée en argument). Voici le code:
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>");
Le problème est que rien n'est imprimé sur la console (content_holder reste vide). Je pense que le problème est dû à l'opérateur "===".
Créez un élément, stockez-y le code HTML et récupérez son 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>"));
Voici une version qui vous permet d'avoir des espaces entre les nœuds, bien que vous ne le souhaitiez probablement que pour les éléments de niveau bloc:
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));
Version à une ligne (plus précisément, une instruction):
function extractContent(html) {
return (new DOMParser).parseFromString(html, "text/html") .
documentElement . textContent;
}
textContext est une très bonne technique pour obtenir les résultats souhaités mais parfois nous ne voulons pas charger DOM. Une solution de contournement si simple suivra l'expression régulière:
let htmlString = "<p>Hello</p><a href='http://w3c.org'>W3C</a>"
let plainText = htmlString.replace(/<[^>]+>/g, '');
utiliser cette expression régulière pour supprimer les balises html et stocker uniquement le texte interne en html
il montre le HelloW3c seulement le vérifier
var content_holder = value.replace(/<(?:.|\n)*?>/gm, '');
Essaye ça:-
<!DOCTYPE html>
<html>
<body>
<script type="text/javascript">
function extractContent(value){
var div = document.createElement('div')
div.innerHTML=value;
var text= div.textContent;
return text;
}
window.onload=function()
{
alert(extractContent("<p>Hello</p><a href='http://w3c.org'>W3C</a>"));
};
</script>
</body>
</html>