我有一个问题,我想删除包含多个textformats的文本字段(包括换行符)中的最后一个字符而不删除格式。
到目前为止,我有:textfield.replaceText(textField.length-1,textField.length-1,'');
我想这不会删除换行符,而且非常慢,似乎会破坏我的文本格式。
或:
textfield.text = textfield.text.slice(0,-1);
这个更快但删除了所有的文本格式。
答案 0 :(得分:1)
我希望我能正确理解你的问题。如果你在htmlText中保留格式,我有一个可能的解决方案:
我们的想法是将格式化文本保持为XML格式,并修改XML。 XML将保持您的格式完整,您不必执行字符串特技飞行来维护它们。缺点当然是必须保持格式化XML有效,以及额外的变量。
以下是一个例子:
var tf:TextField = new TextField();
var t:XML = new XML("<html><p>lalala</p><font color='#ff0000'> lol</font></html>");
tf.htmlText = t.toXMLString();
t.font[0] = t.font[0].text().slice(0, -1);
tf.htmlText = t.toXMLString();
addChild(tf);
答案 1 :(得分:1)
这有点单调乏味,但您可以使用TextField的htmlText
- 属性,即使您没有使用StyleSheets格式化文本:Flash会在内部将所有格式信息转换为HTML文本,因此即使设置textField.text
后,您仍然可以使用xml格式的文本:
textField.text = "A test.";
trace (textField.htmlText);
实际上将返回:
<P ALIGN="LEFT"><FONT FACE="Times Roman" SIZE="12" COLOR="#000000" LETTERSPACING="0" KERNING="0">A test.</FONT></P>
文字将始终显示在<FONT>
标记内,反映您使用setTextFormat()
所做的更改。因此,您可以迭代此行中包含的XML,并仅删除最后一个TextNode中的最后一个字符:
private function removeLastCharacter (textField:TextField) : void {
var xml:XML = new XML (textField.htmlText);
for ( var i : int = xml.children().length()-1; i >= 0; i-- ){
var node:XML = xml.children()[i];
if ( node.name() == "FONT") {
var tx:String = node.text()[0].toString();
node.setChildren (tx.substr (0, tx.length-1));
break;
}
}
textField.htmlText = xml;
trace (textField.text); // In the above example, output will be: "A test";
}