2011-09-19 64 views
1

我有一个看似简单的问题:如何从文本字段获取文本并包含格式?通过通常的文档,我发现只有文本才有可能。也可以获取文本格式,但只有在整个文本字段只使用一种格式时才有效。我需要精确的格式,以便将它转换为带有html标签的字符串。JSFL:将文本从文本字段转换为HTML格式字符串

个人我需要这个,所以我可以将它传递给使用HTML进行格式设置的自定义文本字段组件。但它也可以用来将任何文本字段的内容简单地导出为任何其他格式。这也可能引起其他人的兴趣。 寻找一个解决方案的其他地方,我发现这一点:

http://labs.thesedays.com/blog/2010/03/18/jsfl-rich-text/

这似乎做什么,我需要反向,将HTML转换成Flash文本。我自己试图扭转这种情况迄今尚未取得成功。也许其他人看到一个简单的方法来扭转这种我错过的?也可能有其他解决方案。一种可能是获取文本字段的EXACT数据,其中应该包括格式化某种标记(XML,当查看存储的FLA文件的内容时)。然后删除/转换这些标签。但如果可能的话,我不知道如何做到这一点。另一种选择是使用start-和endIndex遍历每个字符,并将每个格式类型存储在一个数组中。然后我可以将格式应用于每个角色。但是这会导致标签过多。特别是对于超链接!那么有人能帮我解决这个问题吗?

回答

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; 
} 
相关问题