6

div [contenteditable = true]を使用してwysiwygエディターで作業しており、ノードAのオフセットXからノードBのオフセットYまでの選択範囲を設定したいと思います。FirefoxとIE9でうまくいきました。コードは次のとおりです。

var range = document.createRange();
range.setStart(selectNode, 0);
range.setEnd(selectNode, selectNode.textContent.length);
var sel = window.getSelection();
sel.removeAllRanges();
sel.addRange(range);

ただし、IE8では、範囲オブジェクトはまったく異なり、setStart / setEndがなく、選択オブジェクトにはremove/addRangeのものがありません。助けてください、

4

2 に答える 2

4

ランジを見てください。そのクロス ブラウザの範囲/選択 API。それはおそらくあなたが必要とするものです。

http://code.google.com/p/rangy/

于 2011-12-16T04:41:06.103 に答える
3

同様の問題があり、このポリフィルが見つかりました。これは、私の状況では rangy を使用できなかったため、非常に役立ちました

編集:元のリンクは確かに死んでいます。古いコードを振り返ってみると、ポリフィルがリリース コードに組み込まれていないように見えます。次のように機能検出を行っただけです。

if(window.getSelection || document.selection){

次に、マウスアップで:

var range;
if(window.getSelection){
    var selection = window.getSelection();
    range = selection.getRangeAt(0);
} else if(document.selection){
    range = document.selection.createRange();
    if(!range.surroundContents){
        // then give up, feature not fully implemented
    }
}
// now do stuff with range (i.e. the selection)

...したがって、IE8 ユーザーはその機能でサポートされていません。

ただし、すべてが失われるわけではありません。Github には、IE8 をサポートする必要がある場合に機能する可能性のある新しい (私の元の回答よりも) ポリフィルがあります。それはかなりスリムで包括的に見えます。

于 2014-04-20T16:33:21.403 に答える