2010-06-03 4 views
3

J'essaie de trouver un moyen d'utiliser javascript ou jquery pour écrire une fonction qui supprime toutes les balises html d'une page et donnez-moi simplement le texte brut de cette page.Comment obtenir une page Web en texte brut sans html en utilisant javascript?

Comment cela peut-il être fait? des idées?

+0

Voulez-vous une chaîne qui retourne le contenu du texte de '' , alors? – Matchu

+1

Cela semble utile: http://stackoverflow.com/questions/822452/strip-html-from-text-javascript –

Répondre

6

IE & WebKit

document.body.innerText 

Autres:

document.body.textContent 

(comme le suggère Amr Elgarhy) cadres

La plupart des js mettre en œuvre un moyen crossbrowser de le faire. Cela est généralement mis en œuvre un peu comme ceci:

text = document.body.textContent || document.body.innerText; 

Il semble que WebKit conserve une mise en forme avec textContent alors que des bandes tout avec innerText.

+0

Je pense que cela ne fonctionne que dans Internet Explorer – Wolph

+0

Cela fonctionne très bien dans mon WebKit. –

+0

En effet, seul Firefox semble donner des problèmes. Mais dans Opera il me donne encore des balises HTML lors de l'impression innerText – Wolph

3

Cela dépend de la quantité de formatage que vous souhaitez conserver. Mais avec jQuery vous pouvez le faire comme ceci:

jQuery(document.body).text(); 
0

J'utiliserais:

<script language="javascript" type="text/javascript" src="http://code.jquery.com/jquery-1.4.2.js"></script> 
<script type="text/javascript"> 
    jQuery.fn.stripTags = function() { return this.replaceWith(this.html().replace(/<\/?[^>]+>/gi, '')); }; 
    jQuery('head').stripTags(); 

    $(document).ready(function() { 
     $("img").each(function() { 
      jQuery(this).remove(); 
     }); 
    }); 
</script> 

Cela ne libération des styles, mais supprime tous les ÉTIQUETTES.

Est-ce ce que vous vouliez?

[EDIT] maintenant modifié afin d'inclure le retrait des étiquettes d'image [/ EDIT]

+4

Tu ne tenteras pas d'analyser HTML avec des expressions régulières. – Pointy

2

Le seul problème avec textContent ou innerText est qu'ils peuvent bloquer le texte à partir des nœuds adjacents, sans espace blanc entre leur. Si cela vous intéresse, vous pouvez maudire à travers le corps ou un autre conteneur et renvoyer le texte dans un tableau, et les joindre avec des espaces ou des retours à la ligne.

document.deepText= function(hoo){ 
    var A= [], tem, tx; 
    if(hoo){ 
     hoo= hoo.firstChild; 
     while(hoo!= null){ 
      if(hoo.nodeType== 3){ 
       tx= hoo.data || ''; 
       if(/\S/.test(tx)) A[A.length]= tx; 
      } 
      else A= A.concat(document.deepText(hoo)); 
      hoo= hoo.nextSibling; 
     } 
    } 
    return A; 
} 
alert(document.deepText(document.body).join(' ')) 
// return document.deepText(document.body).join('\n') 
+0

Cela peut être une bonne idée d'ajouter aussi 'nodeType' 4 (CDATA) juste au cas où quelqu'un y mettrait du texte.(C'est comme ça que jQuery le fait au moins.) –

1

J'ai dû convertir du texte enrichi dans un courriel HTML en texte brut. Ce qui suit a fonctionné pour moi dans IE (obj est un objet jQuery):

function getTextFromHTML(obj) { 
    var ni = document.createNodeIterator(obj[0], NodeFilter.SHOW_TEXT, null, false); 
    var nodeLine = ni.nextNode(); // go to first node of our NodeIterator 
    var plainText = ""; 

    while (nodeLine) { 
     plainText += nodeLine.nodeValue + "\n"; 
     nodeLine = ni.nextNode(); 
    } 

    return plainText; 
} 
Questions connexes