HTMLコンテンツの選択は、複数の要素にまたがることがあります。また、開始要素と終了要素内のテキストの一部のみで構成されている場合もあります。一般的なケースでは、選択に適用される単一の要素名またはCSSスタイルがないため、これにより、質問に対する正確な回答を提供することが困難になります。ただし、以下で説明する構成要素によって、意図に一致する動作を構築できるようになることを願っています。
WebKitのObjective-CAPIを使用しているので、これがObjective-CAPIとJavaScript内の両方でどのように機能するかを説明します。JavaScriptでは得られないコンパイラーのフィードバックがあるため、Objective-CAPIの使用はより快適になります。
WebView内の選択は、として表され、DOMRange
を使用して取得できます-[WebView selectedDOMRange]
。選択は、ノードのテキストへの-startContainer
オフセットで返される要素から始まります。選択は、によって返されるノード内で-startOffset
オフセットされるまで、DOMの順序ですべてのノードを介して続行されます。-endOffset
-endContainer
挿入ポイントはDOMRange
、プロパティで示されているように、折りたたまれたものとして表されcollapsed
ます。この場合-startContainer
、と-endContainer
は、カレットが存在するノードを示す同じ値を返す必要があり、-startOffset
と-endOffset
は等しく、カレットが存在するテキストコンテンツへのオフセットを表します。
関係するノードを特定したら、通常のDOM APIを使用してタグ名(-[DOMNode tagName]
)を特定し、CSSオブジェクトモデルAPIを使用してスタイル情報(-[DOMDocument getComputedStyle:pseudoElement:]
)を取得できます。
JavaScript側から見ると、概念は似ていSelection
ますが、に到達する前にオブジェクトの中間ステップがありますRange
。
window.getSelection()
オブジェクトを取得するために使用しSelection
ます。このオブジェクトには0個以上の範囲が含まれ、それぞれが選択された領域を表します。ゼロ範囲は、実際の選択ではなく挿入ポイントがあることを意味します。一部のプラットフォームでは不連続な選択がサポートされているため、複数の範囲が許可されます。
上記のように、Selection
オブジェクトのarangeCount
は0で、isCollapsed
値はtrueであり、選択が単なる挿入ポイントであることを示します。
rangeCount
がゼロ以外の場合、を繰り返し呼び出すことにより、内の範囲を反復処理できSelection
ますgetRangeAt
。その時点から、上記のObjective-Cのケースで説明しRange
たオブジェクトと同じインターフェイスを持ち、、、、およびプロパティを持つオブジェクトの操作に戻ります。DOMRange
startContainer
endContainer
startOffset
endOffset