3

javascriptを使用して単語が強調表示された完全な文を生成しようとしています。

window.getSelection 

ハイライトされた単語を取得します。私はjavascriptの範囲の例を探していましたが、句読点が見つかるまで選択範囲を後方に移動し、句読点が見つかるまで前方に移動してループする方法をまだ完全には理解していません。

例:

ソーシャルメディアは神経症との関係が深い。FacebookやTwitterのようなサイトには強迫観念が不可欠です。彼らはエネルギーと話題を追加します。彼らのアイデンティティは彼らのアバターと結びついており、それ自体がサイトを重要に見せています。それらはコンテンツの多くを提供します。昨年秋に発表された調査によると、Twitterの2万人のユーザーがそこで読んだものの半分を提供しています。しかし、強迫観念も危険です。彼らはサイトを不気味に見せることができます。

上記の「Facebook」という単語を選択した場合、最後の文字列は「FacebookやTwitterなどのサイトには強迫観念が不可欠です」になります。


アップデート1:

以下に説明するコードは機能しますが、htmlタグがある場合は停止します。

例:

商務省のレポートを詳しく調べると、さらに残念な数字を見つけることができます。在庫の生産(企業が後で販売することを見越して備蓄に追加する商品)を別にすれば、この四半期の経済成長率はわずか1.6%でした。回復のこの時点で急増するはずの設備投資は、ほとんど上昇しなかった。そして、個人の可処分所得(税金を支払った後に人々が費やさなければならない金額)は、わずか0.4パーセント拡大しました。

上記の「検索」を選択すると、出力文は「商務省のレポートを詳しく調べると、さらに多くの失望した数字を見つけることができます」ではなく、「さらに多くの失望した数字を見つけることができます」になります。

前後のマッチング中にタグを削除するにはどうすればよいですか?

4

2 に答える 2

2

window.getSelectionはオブジェクトを返します。このSelectionオブジェクトから を取得できますRange。これにより、開始オフセットと終了オフセットが提供されます。残りは明らかです:

rng = window.getSelection().getRangeAt(0)
start = rng.startOffset
end = rng.endOffset
text = rng.startContainer.nodeValue

before = text.substr(0, start)
sel = text.substr(start, end - start)
after = text.substr(end)

sentence = before.match(/[^.!?]*$/)[0] +  sel + after.match(/^[^.!?]*/)[0]

これはFFとChrome、IIRCで機能しますが、MSIEでは状況が異なります。詳細については、 http://msdn.microsoft.com/en-us/library/ie/ms535869%28v=vs.85%29.aspxを参照してください。

于 2012-04-28T12:51:55.630 に答える
1

私はRangyライブラリでまさにこれに取り組んでおり、最初のリリースに非常に近づいています。進行中のデモは次のとおりです。

http://rangy.googlecode.com/svn/trunk/demos/textrange.html

于 2012-04-29T17:40:01.893 に答える