2016-03-02 1 views
2

Comment testez-vous si une entité HTML/caractère est incisive ou non à l'aide de JS?Test de rupture de ligne

exemples de caractères de saut de ligne:

  • le bon vieux   < qui est un espace
  • -

exemples de caractères insécables sont:

  • &nbsp; < insécable espace
  • &#8209; < tiret insécable
  • &#8288; < mot-menuisier

Je sais qu'il ya beaucoup d'autres entités HTML qui sont ligne/caractères non-rupture, je ne indice ce qu'ils sont. Comment est-ce que je vérifie si l'on est en ligne sans savoir auparavant?

+1

Vous pouvez probablement interroger les propriétés de caractère Unicode, mais je ne suis pas navigateurs sûr (vous entendez un navigateur plutôt que nœud, non?) Comprennent la fonctionnalité native et une bibliothèque tiers (s'il y en a une) regrouperait une énorme base de données. Quel problème voulez-vous résoudre exactement? Il pourrait y avoir une solution plus simple: -? –

+0

Je veux construire un crawler html qui supprime toutes les balises html et remplace toutes les entités non-rupture avec leur homologue de rupture de ligne. –

+1

Un robot qui fonctionne à partir d'un navigateur? Et supprimer des entités est un objectif en soi? –

Répondre

1

Vous pouvez le tester en créant une div de test avec une largeur minimale, puis vérifiez si le texte passe à la ligne suivante.

var tester=document.getElementById("test"); 
 
var html=document.getElementById("html").value; 
 

 
function testfor() { 
 
    var tester=document.getElementById("test"); 
 
    var html=document.getElementById("html").value; 
 
    var itIs=false; 
 
    tester.innerHTML="a"; 
 
    var height_init=tester.clientHeight; 
 
    console.log(height_init); 
 
    tester.innerHTML+=html+"a"; 
 
    var height_final=tester.clientHeight; 
 
    console.log(height_final); 
 
    if(height_final > height_init) { 
 
    \t itIs=true 
 
    } 
 
    document.getElementById("return").innerHTML=itIs; 
 
} 
 
document.getElementById("html").addEventListener("keydown", function(e) { 
 
    if (!e) { var e = window.event; } 
 

 
    // Enter is pressed 
 
    if (e.keyCode == 13) { testfor(); } 
 
}, false);
#test{ 
 
    width: 1px; 
 
    line-height: 30px; 
 
    font-size: 18px; 
 
}
<div id="test">this&nbsp;text&nbsp;box&nbsp;will&nbsp;take&nbsp;any&nbsp;length&nbsp;of&nbsp;string, and&nbsp;test&nbsp;if&nbsp;the&nbsp;lines&nbsp;break, however&nbsp;it&nbsp;was&nbsp;not&nbsp;designed&nbsp;to&nbsp;handle more&nbsp;than&nbsp;one&nbsp;character/entity/tag&nbsp;at&nbsp;a&nbsp;time</div> 
 
<input id="html" type="text" placeholder="type an HTML character/entity/tag"/> 
 
<p id="return"> 
 

 
</p>