3

私は現在 WYSIWYG ソリューションに取り組んでおり、範囲を指定してノードを正しく選択する機能が必要です (これは、コンテンツだけでなく、ノード自体を意味します)

DOM lvl2 には明らかにこのw3.org/rangesの機能があり、それを定義します

range.selectNodeContents() // Select the contents within a node

range.selectNode() //Select a node and its contents

問題は、selectNode() が Firefox や ie9 で完全に動作する場合でも、Webkit ブラウザー (最終的には Chrome と Safari) では実現できないように見えることです。Webkit では、selectNodeContents() と selectNode() の両方がノード コンテンツのみを選択します (仕様によると、これはバグのようです)。

それを機能させるために、使用して selectNode() ゴールをエミュレートしようとしまし たが、結果は同じです。どこでも機能しますが (もちろん > 8)、Webkit ブラウザーでは機能しません..
range.setStartBefore(node);
range.setEndAfter(node);

試してみたい場合は、ここで再生できる小さな jsfiddle を作成しました(コンソールを開いて、Webkit とは異なる console.warn の結果を確認してください :/ )

よく検索しましたが、Webkit ブラウザーで実際に完全なノードを選択する方法が見つかりません。奇跡的に、あなたの何人かはそれを行う方法、または私の探求を続けるためのヒントを知っていますか? :/

ps : 私は "rangy" lib を知っていますが、自分のプロジェクトでは使用できません。

4

1 に答える 1

2

問題はselectNode()、WebKit で正常に動作する ではなく、WebKit の選択オブジェクトにあります。これは、選択境界とキャレット位置が許可されている場所の独自の (常に不合理であるとは限りません) アイデアに適合するように範囲を台無しにします。WebKit でこれに対して提出されたバグがあります。

そうです、Rangy はこれに対処せず、代わりにブラウザーのネイティブ選択の現実を反映することを好みます。選択が異なるふりをすると、すぐに奇妙な動作につながります。

于 2012-07-11T22:25:19.807 に答える