我有一个看似简单的问题:如何从文本字段中获取文本并包含格式?通过通常的文档,我发现只能获得文本。也可以获取文本格式,但这仅在整个文本字段仅使用一种格式时才有效。我需要精确的格式,以便将其转换为带有html标签的字符串。
我个人需要这个,所以我可以将它传递给使用HTML进行格式化的自定义文本字段组件。但它也可以用于简单地将任何文本字段的内容导出为任何其他格式。这也可能是其他人感兴趣的。 在其他地方寻找解决方案我发现了这个:
http://labs.thesedays.com/blog/2010/03/18/jsfl-rich-text/
这似乎与我需要的相反,将HTML转换为Flash Text。到目前为止,我自己试图扭转这种局面并未取得成功。也许其他人看到了一个简单的方法来扭转我的错过?可能还有其他解决方案。一种可能是获取文本字段的EXACT数据,其中应包括某种格式标记(XML,当查看存储的FLA文件的内容时)。然后删除/转换这些标签。但是,如果可能的话,我不知道如何做到这一点。另一种选择是使用start-和endIndex循环遍历每个字符,并将每种格式类型存储在数组中。然后我可以将格式应用于每个字符。但这会导致标签过多。特别是超链接!所以有人可以帮我这个吗?
答案 0 :(得分:1)
派对有点晚,但是以下函数将JSFL静态文本元素作为输入,并根据找到它的TextRuns数组的样式返回HTML字符串(使用Flash友好<font>
标记)。它正在做一些基本的正则表达式来清理一些标签和双空格等,并将/r
和/n
转换为<br/>
标签。它可能并不完美,但希望你能看到发生了什么变得容易改变或修复它。
function tfToHTML(p_tf)
{
var textRuns = p_tf.textRuns;
var html = "";
for ( var i=0; i<textRuns.length; i++ )
{
var textRun = textRuns[i];
var chars = textRun.characters;
chars = chars.replace(/\n/g,"<br/>");
chars = chars.replace(/\r/g,"<br/>");
chars = chars.replace(/ /g," ");
chars = chars.replace(/. <br\/>/g,".<br/>");
var attrs = textRun.textAttrs;
var font = attrs.face;
var size = attrs.size;
var bold = attrs.bold;
var italic = attrs.italic;
var colour = attrs.fillColor;
if ( bold )
{
chars = "<b>"+chars+"</b>";
}
if ( italic )
{
chars = "<i>"+chars+"</i>";
}
chars = "<font size=\""+size+"\" face=\""+font+"\" color=\""+colour+"\">"+chars+"</font>";
html += chars;
}
return html;
}