テキストボックスのhtmlText
プロパティを使用して、単語を動的にリンクさせることができます。次に、TextEvent.LINK
イベントを使用して、クリックされた単語をキャッチします。
テキスト ボックスにコンテンツを入力する前に、「キーワード」のリストを反復処理して、.replace("keyword", '<a href="event:keyword">keyword</a>');
したがって、コードは次のようになります。
// get the file contents using whatever method you use
var contents:String = getFileContents("page2.txt");
// assuming you have your keywords in an array
var keywords:Array = ["Apples", "Pears"];
for each (var keyword:String in keywords) {
// replace the current keyword with a version of itself wrapped in a link
contents = contents.replace(keyword, '<a href="event:' + keyword + '">' + keyword + '</a>');
}
yourTextField.htmlText = contents;
// add an eventlistener for the click
yourTextField.addEventListener(TextEvent.LINK, linkClicked);
function linkClicked(e:TextEvent):void {
// load the article for the clicked word =]
loadPage(e.text);
}
更新
キーワードの大文字と小文字を無視したい場合は、「りんご」が「りんご」と一致します(「aPpLeS」も一致します)、正規表現を使用して、単語をそのまま保持できるようにする必要があります本文中:
// build a |-separated list of keywords
var keywordList:String = "";
for each (var keyword:String in keywords) {
keywordList += ((keywordList != "") ? "|" : "") + keyword;
}
// build the regex and replace each keyword in-place
var pattern:RegExp = new RegExp("(" + keywordList + ")", "gi"); // "i" for ignore-case =]
contents = contents.replace(pattern, '<a href="event:$1">$1</a>');
上記が|
-separated キーワードのリストを構築し、(各キーワードの置換ではなく) 単一の置換を行う理由は、separated-list が順番に置換を行い、見つかったキーワードが挿入された HTML を壊すことを許可しないためです。前のキーワード (たとえば、「イベント」というキーワードがあったとします。これを make に置き換えると、HTML が壊れます<a href="<a href="event:event">event</a>:keyword1">keyword1</a>
)。
テキストの元のケースは、イベントと共に送信されます。既存のすべてのキーワードを検索して、イベントに渡されたキーワードと比較する (比較のために両方を小文字に変換する.toLowerCase()
) か、プライマリ キーワードは常に小文字で、毎回リストを検索する心配はありません。