0

actionscript では、html テキストの実際の文字列の長さを取得する直接的な方法が見つかりませんでした。

var myText:String = "<p>This is <b>some</b> content to <i>render</i> as <u>HTML</u> text.</p>"; 
myTextBox.htmlText = myText;
trace(myTextBox.length);

html テキストの大きなコンテンツを処理すると、パフォーマンスの問題が発生します。

テキストデバイスに渡す必要がない長さを取得する方法はありますか?

4

1 に答える 1

1

xml からテキストを抽出するには、次の 2 つの方法があります。

  1. xHTML最良の方法は、それを XML に解析し、すべてのテキスト ノードを抽出することです。
  2. すべてのタイプのテキストについてRegExp、HTML タグの一部ではないテキストと一致することを試すことができます ( http://regexr.com?363li )

    var s:String = "<p>This is <b>some</b> content to <i>render</i> as <u>HTML</u> text.</p>";
    
    //by TextField
    var tf:TextField = new TextField();
    tf.htmlText = s;
    trace(tf.text);
    trace(tf.length);
    
    //well-formed XML
    XML.ignoreWhitespace = false;
    var x:XML = new XML(s);
    
    var t:String = "";
    var list:XMLList = x..*;
    for each(var node:XML in list)
        if(node.nodeKind() == "text")
            t += node;
    
    trace(t);
    trace(t.length);
    
    //by RegExp (non wel formed XML)
    var match:Array = s.match(/(?<=^|>)[^><]+?(?=<|$)/gs);
    s = match.join("");
    trace(t);
    trace(t.length);
    

出力:

22528
21  ms
22528
35  ms
22528
20  ms

しかし、22k 文字の文字列の場合、すべてのメソッドが 20 ~ 30 ミリ秒でほぼ同じ結果で実行されることがわかるように、これらの手法はすべてパフォーマンスがほぼ等しいように見えますが、入力に対して両方の方法を試すことができます。

于 2013-08-26T11:32:03.223 に答える