2010-09-21 2 views
0

Greetings, Я вижу, что когда я устанавливаю htmlText в элементе управления textarea, свойство text содержит бесплатную версию текста html. Таким образом, есть парсер где-то, что вырывает html из контента, что было бы очень полезно для моих целей. Однако, основываясь на исходном коде flex, настройка html выполняется в UITextField.as, который является типом члена текстового поля TextArea. Строка, которая выполняет эту работу: super.htmlText = value; в функции переопределить публичную функцию набора HTMLText (значение: String): пустоеМогу ли я получить доступ к htmlText setter code в textArea в Flex?

Пытаясь следовать класс hieararchy, я в конечном итоге в классе FlexTextField, который расширяет класс TextField флэш-проигрывателя.

Похоже, что функциональность, которой я пользуюсь, находится в проигрывателе флэш-памяти. Итак, есть ли способ доступа к этой функции очистки html? Я что-то упустил?

С наилучшими пожеланиями Seref

ответ

1

В случае регулярное выражение не может вас, здесь что-то вы можете проверить:

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: Я не проверял этот код ActionScript, здесь эквивалентный код JavaScript, который я тестировал и нашел работу. Я предполагаю, что он будет работать в ActionScript, поскольку оба следуют 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); 

выход:

asd This is some text :) 
and more 
+0

Спасибо, я думаю, что это должно сработать для меня отлично. – mahonya

1

Нет, нет никакого способа доступа к коду в родных классов Flash Player.

Однако вы должны иметь возможность использовать регулярное выражение для простого анализа всех HTML-тегов в вашем контенте.

Хотя, не проверено, вот one option, который появился в Google. Вы можете просто использовать это в Flex. Таким образом, вы можете, вероятно, сделать что-то вроде этого:

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

Конечно, это было написано в браузере. More info on Regex in Flex.

+0

Спасибо, просто быстрый д: насколько я знаю, там нет заменить все в ActionScript 3, так что заменить ниже, следует, скорее, раскол (...) .join (""), правильно? – mahonya

+0

Чтобы заменить все в ActionScript w/regex, я считаю, что вы можете указать флаг 'g'. Например: новый RegExp ('<(.|\n)*?>', 'g'); – JeffryHouser

+0

А, это удобно, спасибо! – mahonya

Смежные вопросы