2

テキストを選択してその選択をlocalStorageまたはDBに保存しようとしていますが、ストレージから読み戻すことで、以前に選択したテキストを強調表示できます。しかし、選択したテキストがページ内の複数の場所にある場合は、すべてのインスタンスが強調表示されますが、これは望ましくありません。選択したテキストの左と上をつかむことができますが、フォントのサイズを変更すると、左/上が変わります。これに関連して共有するものがないため、ここではコードを共有していません。参考までに、私は同じ機能を備えたiPadのiBooksアプリを参照していますが、それがどのように正しく行われるのか知りたいですか?

更新:選択したテキストの周りにマーカーを追加して、後で強調表示する選択した文字列の開始と終了を把握できる新しいアプローチを試しました。ここでデモを見ることができます:http://jsfiddle.net/codef0rmer/jE4w5/

しかし、iPadでは機能しrangeCountていません。iPadの回避策はありますか?

4

1 に答える 1

4

window.getSelection()少なくとも最新のブラウザでは、を使用して現在の選択に関する情報を取得できます。それはSelectionオブジェクトを返します、あなたはそのオブジェクトによって提供されたプロパティで遊ぶことから始めることができます:

  • branchNode 選択が開始されるノードを返します。

  • branchOffset 選択範囲のアンカーがanchorNode内でオフセットされる文字数を返します。

  • focusNode 選択が終了するノードを返します。

  • focusOffset 選択範囲のフォーカスがfocusNode内でオフセットされる文字数を返します。

  • isCollapsed 選択範囲の開始点と終了点が同じ位置にあるかどうかを示すブール値を返します。

  • rangeCount 選択範囲内の範囲の数を返します。

また、メソッドを使用すると、SelectionからRangegetRangeAt()オブジェクトを取得できます。これにより、より便利なメソッドとプロパティが提供されます。

このソリューションをどこまで進めたいかわかりません。質問は非常に一般的であるため、すぐに使用できるソリューションというよりは、進むべき方向に近いものです。

于 2012-07-11T13:48:03.683 に答える