- ベストアンサー
選択範囲の取得と設定(JavaScript)
- IEとFirefoxで選択範囲の取得と設定する方法について教えてください
- ユーザーが要素を選択してボタンAを押すと、選択範囲の開始位置と終了位置を変数に保存します
- 選択が解除されてボタンBを押すと、保存された選択範囲を元に文書内の該当部分を選択できます
- みんなの回答 (2)
- 専門家の回答
質問者が選んだベストアンサー
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"> <title>Selection</title> <p><a>月日</a>は<a>白代</a>の<a>過客</a>にして<a>行き交う</a><a>年</a>も<a>旅人</a>なり。</p> <p> <input type="button" value="記憶" onmousedown="A(this.ownerDocument);"> <input type="button" value="復元" onmousedown="B(this.ownerDocument);"> </p> <script type="text/javascript"> var R = null; var A = new Function; var B = new Function; // DOM-HTML5 (from Gecko) if (document.defaultView && document.defaultView.getSelection) A = function(doc) { var s = doc.defaultView.getSelection(); if (! s.isCollapsed) R = s.getRangeAt(0); }, B = function(doc) { if (R) { var s = doc.defaultView.getSelection(); s.removeAllRanges(); s.addRange(R); } }; // MSHTML (IE5+) else if (document.selection && document.selection.createRange) A = function(doc) { var r = doc.selection.createRange(); if (r.text.length > 0) R = r; }, B = function(doc) { if (R) R.select(); }; </script>
その他の回答 (1)
- nekomikekamo
- ベストアンサー率73% (71/97)
firefox、safari、Chromeのみですが(IEは頑張ってください) var ranges = []; var selection = function(){ if (window.getSelection) { return window.getSelection(); } else { if (document.getSelection) { return document.getSelection(); } else { if (document.selection) { return document.selection; } } } }; //現在の選択内容をrangesに保持し、選択を解除 var clear_select = function(){ var sel = selection(); if(sel.removeAllRanges){ //範囲の保持 for(var i = 0; i < sel.rangeCount; i++) { ranges[i] = sel.getRangeAt(i); } sel.removeAllRanges(); } else{ //ie if(sel.empty) { ranges = sel.createRange(); sel.empty(); } } }; //rangesを元に選択を復帰。 var re_select = function(){ var sel = selection(); clear_select(); if(sel.addRange){ for(var i = 0; i < ranges.length; i++) { sel.addRange(ranges[i]); } ranges = []; }else{ //ie用。。。。 } };
お礼
ありがとうございました。範囲ではなくてレンジそのものを代入できるんですね…。 IEのやり方までわざわざありがとうございます