2010-09-21 31 views
0

Salutations, Je peux voir que lorsque je définis htmlText dans un contrôle textarea, la propriété text contient la version html free du texte. Donc, il y a un analyseur quelque part qui extrait du code HTML du contenu, ce qui serait très utile pour mes besoins. Toutefois, en fonction du code source flex, le paramètre html est défini dans UITextField.as, qui est le type du membre textfield de TextArea. La ligne qui fait le travail est: super.htmlText = value; en fonction override public function mettre htmlText (valeur: String): voidPuis-je avoir accès au code setter htmlText dans textArea dans Flex?

Essayer de suivre la hieararchy de classe, je finis en classe FlexTextField, qui étend la classe TextField du lecteur flash.

Il semble que la fonctionnalité que je recherche soit dans Flash Player. Alors, y a-t-il un moyen d'accéder à cette fonction de nettoyage html? Est-ce que j'ai râté quelque chose?

Cordialement Seref

Répondre

1

En cas regex vous échoue, voici quelque chose que vous pouvez consulter:

var t:String = "asd <span>This is <font>some</font> text <b> :) </b> </span> \nand more"; 
function stripTags(x:XML):String { 
    var t:String = ""; 
    var children:XMLList = x.children(); 
    var child:XML; 
    for(var i:Number = 0; i < children.length(); i++){ 
    child = children[i]; 
    if(child.nodeKind() == "text") 
     t += child.toString(); 
    else if(child.nodeKind() == "element") 
     t += stripTags(child); 
    } 
    return t; 
} 
var x:XML = new XML("<root>" + t + "</root>"); 
XML.ignoreWhitespace = false; 
var s:String = stripTags(x); 
trace(s); 

PS: Je ne l'ai pas testé ce code ActionScript, voici le code JavaScript équivalent que je l'ai testé et trouvé de travail. Je suppose que cela fonctionnerait dans ActionScript puisque les deux suivent ECMAScript.

var t = "asd <span>This is <font>some</font> text <b> :) </b> </span> \nand more"; 
function stripTags(str){ 
    function strip(x){ 
    var t = ""; 
    var children = x.children(); 
    var child; 
    for(var i = 0; i < children.length(); i++){ 
     child = children[i]; 
     if(child.nodeKind() == "text") 
     t += child.toString(); 
     else if(child.nodeKind() == "element") 
     t += strip(child); 
    } 
    return t; 
    } 
    var xml = new XML("<root>" + str + "</root>"); 
    XML.ignoreWhitespace = false; 
    return strip(xml); 
} 
var s = stripTags(t); 
console.log(s); 

sortie:

asd This is some text :) 
and more 
+0

Merci, je pense que cela devrait fonctionner très bien pour moi. – mahonya

1

Non, il n'y a aucun moyen d'accéder au code dans Flash Player classes natives. Toutefois, vous devriez être en mesure d'utiliser une expression régulière pour analyser facilement toutes les balises HTML dans votre contenu.

Bien que non testé, voici one option qui est apparu dans Google. Vous pouvez simplement l'utiliser dans Flex. Ainsi, vous pouvez sans doute faire quelque chose comme ceci:

var regEx : RegExp = new RegExp('<(.|\n)*?>'); 
var noHTMLText = htmlText.replace(regEx , ''); 

Bien sûr, cela a été écrit dans le navigateur. More info on Regex in Flex.

+0

Merci, juste un q rapide: pour autant que je sache, il n'y pas de remplacer tout en actionscript 3, donc le remplacer ci-dessous devrait plutôt être une scission (...) .join (""), n'est-ce pas? – mahonya

+0

Pour remplacer tout dans ActionScript w/regex, je crois que vous pouvez spécifier le drapeau 'g'. Comme ceci: nouveau RegExp ('<(.|\n)*?>', 'g'); – JeffryHouser

+0

Ah, c'est pratique, merci! – mahonya