[ JavaScript ] IE の Range オブジェクトについての質問です。


テキストボックスからフォーカスが外れた際のイベント(jQueryの'focusout'イベントを使ってます)で、選択されていた部分の文字列を取得するという処理をしたいのですが、どうしてもうまく行きません。
以下のJavaScriptのソースコード中、try区の2行目でエラーが発生し、「引数が無効です」と言われてしまうのですが、どうしても原因が特定できず困っています。

どなたか、原因のわかる方のお知恵をお借りできたらと思います。

ソースコードを掲載したら、質問が長すぎると言われてしまったので、以下に別途掲載しました。
http://d.hatena.ne.jp/norisuke3/20110208/1297129434

よろしくお願いします。

回答の条件
  • 1人2回まで
  • 13歳以上
  • 登録:2011/02/08 10:48:22
  • 終了:2011/02/08 13:27:07

回答(1件)

id:Cherenkov No.1

Cherenkov回答回数1502ベストアンサー獲得回数4922011/02/08 12:40:40

ポイント60pt

とりあえずこれで動いたという回答です。

目的は focusout時に選択した文字列を取得 でしょうか。

IEだけで動けばいいのですか?

<html>
  <haed>
    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.5.0/jquery.min.js"></script>
    <script type="text/javascript">
jQuery(document).ready(function($){
  var test1 = function(e){
    var range = document.selection.createRange();
    //var range2 = document.body.createTextRange();
    var range2 = range.duplicate();
    var res = {};
    try{
      //range2.moveToElementText(this);
      range2.setEndPoint('EndToEnd', range);
    } catch(e) {
      alert(e.message);
    }
    res.start = range2.text.length - range.text.length;
    res.end = res.start + range.text.length;
    res.text = range.text.substring(res.start, res.end);
    
    alert(range2.text);
  };
			 
  $("#my-input, textarea")
    .bind("focusout", test1);
});
</script>
  </haed>
  <body>
    <input id="my-input" type="text" name="foo" value="test" />
    <br>
    <textarea>aaaa
bbb
ccc
</textarea>
  </body>
</html>

もしくは、

(Vista, IE8, Firefox3.6.13で動作確認)

<html>
  <haed>
    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.5.0/jquery.min.js"></script>
    <script type="text/javascript">
$(function(){
  $("#my-input, textarea").bind("focusout", function(e){ //select
    var isMSIE = /*@cc_on!@*/0;
    if (!isMSIE) {
      alert(this.value.slice(this.selectionStart, this.selectionEnd));
    } else {
      var range = document.selection.createRange();
      alert(range.text);
    }
  });
});
</script>
  </haed>
  <body>
    <input id="my-input" type="text" name="foo" value="test" />
    <br>
    <textarea>aaaa
bbb
ccc
</textarea>
  </body>
</html>

参考:

textareaの選択範囲を取得し、前後に文字列を挿入する - Archiva

id:norisuke3

おお!!ありがとうございます!!

早速試してみます。

2011/02/08 13:19:52
  • id:windofjuly
    うぃんど 2011/02/08 12:17:26
    頭がボォーーっとしてるので、とりあえず原因部分だけね

    × var range2 = document.body.createTextRange();
    ○ var range2 = range.duplicate();
  • id:norisuke3
    Cherenkovさん、windofjulyさんありがとうございます!!
    完璧です!!
    本当に助かりました。
    windofjulyさんは、私の質問の検証中にわ私が回答撃ち切ってしまったみたいで申し訳ないです。
    別途ポイントを送らせていただきます。
  • id:windofjuly
    うぃんど 2011/02/08 13:28:47
    送らないでくださいね
    まじめに考えようとしなかっただけなんだし…(投稿時間を見比べれば判りますよ)
  • id:sayo213sayo
    コメント荒らし キタ━━(━(━(-( ( (゚∀゚) ) )-)━)━) ━━ !!!!!
     
    そこまでしてポイントが欲しいのか・・・
  • id:norisuke3
    荒らしじゃないんじゃん?
  • id:norisuke3
    こんなの有った!!
    W3C DOM Ranges for IE
    http://code.google.com/p/ierange/

この質問への反応(ブックマークコメント)

トラックバック

「あの人に答えてほしい」「この質問はあの人が答えられそう」というときに、回答リクエストを送ってみてましょう。

これ以上回答リクエストを送信することはできません。制限について

絞り込み :
はてなココの「ともだち」を表示します。
回答リクエストを送信したユーザーはいません