0

您好,我可以看到当我在 textarea 控件中设置 htmlText 时, text 属性包含文本的 html 免费版本。因此,某处有一个解析器从内容中提取 html,这对我的目的非常有用。但是基于flex源码,html的设置是在UITextField.as中完成的,这是TextArea的textfield成员的类型。完成这项工作的行是: super.htmlText = value; 在函数中覆盖公共函数集 htmlText(value:String):void

试图遵循类层次结构,我最终进入了 FlexTextField 类,它扩展了 Flash 播放器的文本字段类。

看来我所追求的功能是在 Flash 播放器中。那么有什么方法可以访问这个 html 清理功能呢?我在这里错过了什么吗?

最好的问候

4

2 回答 2

1

不,无法访问 Flash Player 本机类中的代码。

但是,您应该能够使用 Regex 轻松解析出内容中的所有 HTML 标签。

尽管未经测试,但这是 Google 中提出的一种选择。您可以在 Flex 中使用它。因此,您可能可以执行以下操作:

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

当然,这是在浏览器中编写的。 有关 Flex 中的正则表达式的更多信息

于 2010-09-21T12:13:41.950 回答
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
于 2010-09-21T14:48:24.207 回答