2011-12-16 9 views
6

div [contenteditable = true]を使用してwysiwygエディタで作業しています。 とノードBのオフセットYからノードYのオフセットXまでの選択範囲を設定したいと思います。JavaScriptの選択範囲を設定するIE8

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を持っていない、全く異なる、選択オブジェクトが削除/ addRangeの低いものを持っていない:FirefoxとIE9上で、コードがあります。 助けてください、

答えて

4

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

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

+3

Rangely-core.jsは42kb圧縮されており、設計上の考慮事項になります。 – Roberto

3

私は同様の問題は、私は私の状況でrangyを使用することができなかったとして、私にとって非常に有用であった。このポリフィルを発見した: http://bl.ocks.org/visnup/3456262

編集:元のリンクは確かに死んでしまいました。

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

を、その後のmouseup上:ポリフィルがリリースコードにそれを作ったことがないように見える戻って私の古いコードの上に見て、我々は、単に次のように特徴検出を行ってきました

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ユーザーはその機能でサポートされていません。

IE8をサポートする必要がある場合は、newer (than my original answer) polyfill on Githubがあります。それはかなりリーンで包括的に見えます。

+1

このソリューションは800バイトしか圧縮されておらず、要件ごとにIE8をターゲットにしています。これは、Rangely.jsとは対照的に、より重たい解決策かもしれません。 – Roberto

+0

これは私にとっても魅力のように機能し、それを行うには最良の方法だと思います。 – AsGoodAsItGets

+0

リンクが無効です。誰か新しいリンクを提供できますか? –

関連する問題