レス数:4 / 状態:解決済み / No:22 / ATOM
1
名前:marbo
日付:2016/06/26(日)04:03:45
ID:9oC627SOPQCi
JavaScriptの初心者です。
Chromeで、NicEditと言うWYSIWYGエディタの起動状態で、子ウィンドウからカーソル(キャレット)
の後続文字列が取得できない問題があります。空文字列?が返され、中身は空です。
しかし、特にエラーは出ません。
FireFox47.0では、後続文字列が選択され、取得出来ます。
Edgeでも一部問題はありますが、取得出来ます。
以下がそのコードです。
function getCursor(){
var win = window.opener;
var editor = win.document.getElementById("テキストエリアのID"); //Editor表示領域
var sel = win.window.getSelection();
sel.getRangeAt(0).setEndAfter(editor);//ここがChromeで思った通り動作しないように思います。
window.alert(sel);
var str_obj = new String(sel);
var pos = str_obj.toString();
return pos;
}
お分かりになりましたら、どうぞご教授して下さいませ。
Chromeで、NicEditと言うWYSIWYGエディタの起動状態で、子ウィンドウからカーソル(キャレット)
の後続文字列が取得できない問題があります。空文字列?が返され、中身は空です。
しかし、特にエラーは出ません。
FireFox47.0では、後続文字列が選択され、取得出来ます。
Edgeでも一部問題はありますが、取得出来ます。
以下がそのコードです。
function getCursor(){
var win = window.opener;
var editor = win.document.getElementById("テキストエリアのID"); //Editor表示領域
var sel = win.window.getSelection();
sel.getRangeAt(0).setEndAfter(editor);//ここがChromeで思った通り動作しないように思います。
window.alert(sel);
var str_obj = new String(sel);
var pos = str_obj.toString();
return pos;
}
お分かりになりましたら、どうぞご教授して下さいませ。
2
日付:2016/06/28(火)06:09:32
ID:Z2fjSFchf0/1
ブラウザによっては、
Selection と Range オブジェクトは、コピー渡しの関係となります。
一般的な、参照で相互接続された状態ではありません。
Range の変更をブラウザに反映するには、
Selection 内の Range リストの更新も必要となります。
<span id="aaa">あいうえお</span>
<span id="bbb">かきくけこ</span>
<span id="ccc">さしすせそ</span>
<script type="text/javascript">
// ------------------------------------------------------------
// Selection オブジェクトを取得
// ------------------------------------------------------------
var selection = window.getSelection();
// ------------------------------------------------------------
// 新しい Range オブジェクトを作成
// ------------------------------------------------------------
var range = document.createRange();
// ------------------------------------------------------------
// "aaa" を選択
// ------------------------------------------------------------
range.selectNode( window["aaa"] );
// ------------------------------------------------------------
// Range リストを更新してブラウザに反映
// ------------------------------------------------------------
selection.removeAllRanges(range);
selection.addRange(range);
// ------------------------------------------------------------
// 2 秒後に実行
// ------------------------------------------------------------
setTimeout(function(){
// ------------------------------------------------------------
// "bbb" を選択
// ------------------------------------------------------------
range.selectNode( window["bbb"] );
// ------------------------------------------------------------
// Range リストを更新してブラウザに反映
// ------------------------------------------------------------
selection.removeAllRanges(range);
selection.addRange(range);
} , 2000);
// ------------------------------------------------------------
// 4 秒後に実行
// ------------------------------------------------------------
setTimeout(function(){
// ------------------------------------------------------------
// 0 番目の Range オブジェクトを取得
// ------------------------------------------------------------
var range = selection.getRangeAt(0);
if(!range) return;
// ------------------------------------------------------------
// "ccc" を選択
// ------------------------------------------------------------
range.selectNode( window["ccc"] );
// ------------------------------------------------------------
// Range リストを更新してブラウザに反映
// ------------------------------------------------------------
selection.removeAllRanges(range);
selection.addRange(range);
} , 4000);
</script>
Selection と Range オブジェクトは、コピー渡しの関係となります。
一般的な、参照で相互接続された状態ではありません。
Range の変更をブラウザに反映するには、
Selection 内の Range リストの更新も必要となります。
<span id="aaa">あいうえお</span>
<span id="bbb">かきくけこ</span>
<span id="ccc">さしすせそ</span>
<script type="text/javascript">
// ------------------------------------------------------------
// Selection オブジェクトを取得
// ------------------------------------------------------------
var selection = window.getSelection();
// ------------------------------------------------------------
// 新しい Range オブジェクトを作成
// ------------------------------------------------------------
var range = document.createRange();
// ------------------------------------------------------------
// "aaa" を選択
// ------------------------------------------------------------
range.selectNode( window["aaa"] );
// ------------------------------------------------------------
// Range リストを更新してブラウザに反映
// ------------------------------------------------------------
selection.removeAllRanges(range);
selection.addRange(range);
// ------------------------------------------------------------
// 2 秒後に実行
// ------------------------------------------------------------
setTimeout(function(){
// ------------------------------------------------------------
// "bbb" を選択
// ------------------------------------------------------------
range.selectNode( window["bbb"] );
// ------------------------------------------------------------
// Range リストを更新してブラウザに反映
// ------------------------------------------------------------
selection.removeAllRanges(range);
selection.addRange(range);
} , 2000);
// ------------------------------------------------------------
// 4 秒後に実行
// ------------------------------------------------------------
setTimeout(function(){
// ------------------------------------------------------------
// 0 番目の Range オブジェクトを取得
// ------------------------------------------------------------
var range = selection.getRangeAt(0);
if(!range) return;
// ------------------------------------------------------------
// "ccc" を選択
// ------------------------------------------------------------
range.selectNode( window["ccc"] );
// ------------------------------------------------------------
// Range リストを更新してブラウザに反映
// ------------------------------------------------------------
selection.removeAllRanges(range);
selection.addRange(range);
} , 4000);
</script>
3
名前:marbo
日付:2016/06/29(水)06:54:44
ID:9oC627SOPQCi
丁寧にご説明頂き、理解は出来ませんでしたが、参考になりました。
別の方法を考えてみます。
誠にありがとうございました。
別の方法を考えてみます。
誠にありがとうございました。
4
名前:状態変更
日付:2016/06/29(水)06:55:59
ID:9oC627SOPQCi
この質問の状態を『解決』に変更しました。
このスレッドについて
質問の状態 : | 解決済み |
投稿開始日 : | 2016/06/26(日)04:03:45 |
投稿終了日 : | 2016/07/06(水)06:56:29 |
投稿者 : | marbo |
レス総数 : | 4 |
スレッド番号 : | 22 |