您可以使用文本框的
htmlText
属性动态地将单词转换为链接。然后使用
TextEvent.LINK
事件来捕获所点击的单词。
在填充文本框内容之前,只需遍历您的“关键字”列表并执行
.replace("keyword", '<a href="event:keyword">keyword</a>');
即可。
因此,您的代码将类似于:
var contents:String = getFileContents("page2.txt");
var keywords:Array = ["Apples", "Pears"];
for each (var keyword:String in keywords) {
contents = contents.replace(keyword, '<a href="event:' + keyword + '">' + keyword + '</a>');
}
yourTextField.htmlText = contents;
yourTextField.addEventListener(TextEvent.LINK, linkClicked);
function linkClicked(e:TextEvent):void {
loadPage(e.text);
}
更新
如果您希望忽略关键字的大小写,使得“apples”可以匹配“Apples”(甚至是“aPpLeS”),则需要使用正则表达式,以便您还可以在文本中保留单词本身:
var keywordList:String = "";
for each (var keyword:String in keywords) {
keywordList += ((keywordList != "") ? "|" : "") + keyword;
}
var pattern:RegExp = new RegExp("(" + keywordList + ")", "gi");
contents = contents.replace(pattern, '<a href="event:$1">$1</a>');
上面代码将关键字列表用符号“|”分隔并进行单次替换(而不是每个关键字都替换一次),原因是分隔列表将按顺序进行替换,不允许先前关键字插入的HTML被后面找到的关键字破坏(例如,如果有一个关键字"event",则替换为
<a href="<a href="event:event">event</a>:keyword1">keyword1</a>
将会破坏HTML结构)。
文本的原始大小写将随事件一起发送。 您可以通过搜索所有现有关键字并将它们与传递给事件的关键字进行比较(使用
.toLowerCase()
将两者转换为小写进行比较),或者您可以制定主要关键字始终为小写,不必每次搜索列表。
<b>
:<span style="font-weight: bold;">关键词</span>
,但我不能保证它会起作用。 - newfurniturey