2012-01-25 20 views
0

のテキストoutisideを取得することができます。Javascriptを:どのように私は私がして選択範囲のテキストを取得する方法を知って、選択したテキストの範囲

if (elem.getSelection) { 
     sel = elem.getSelection(); 
     if (sel.rangeCount) { 
      selectedText=sel.getRangeAt(0); 
     } 
    } else if (elem.selection) { 
     selectedText=elem.selection.createRange(); 
    } 

質問 - どのように私は前の範囲とした後に、選択したテキストを得ることができますか? ありがとうございます。

答えて

1

ここではほとんどのブラウザでは、この使用してDOM Rangeを行うための機能だとIEで< 9.

ライブデモ:http://jsfiddle.net/bVpqR/

コード:

function getUnselectedText(containerEl) { 
    var sel, range, tempRange, before = "", after = ""; 
    if (typeof window.getSelection != "undefined") { 
     sel = window.getSelection(); 
     if (sel.rangeCount) { 
      range = sel.getRangeAt(0); 
     } else { 
      range = document.createRange(); 
      range.collapse(true); 
     } 
     tempRange = document.createRange(); 
     tempRange.selectNodeContents(containerEl); 
     tempRange.setEnd(range.startContainer, range.startOffset); 
     before = tempRange.toString(); 

     tempRange.selectNodeContents(containerEl); 
     tempRange.setStart(range.endContainer, range.endOffset); 
     after = tempRange.toString(); 

     tempRange.detach(); 
    } else if ((sel = document.selection) && sel.type != "Control") { 
     range = sel.createRange(); 
     tempRange = document.body.createTextRange(); 
     tempRange.moveToElementText(containerEl); 
     tempRange.setEndPoint("EndToStart", range); 
     before = tempRange.text; 

     tempRange.moveToElementText(containerEl); 
     tempRange.setEndPoint("StartToEnd", range); 
     after = tempRange.text; 
    } 
    return { 
     before: before, 
     after: after 
    }; 
} 
+0

チャームのように働いた。どうもありがとうございます。また、少し誤差があります。すべてのドキュメントとウィンドウはcontainerElに置き換えてください –

+0

@TimurGafforov: 'document'と' window'への参照は正しいです。要素には 'getSelection()'や 'createRange()'や 'selection'プロパティはありません。元のコードは、 'elem'が' document'のような 'Document'ノードである場合にのみ機能します。 iframeなどの別のドキュメントで選択項目を操作する必要がある場合は、iframeからドキュメントとウィンドウオブジェクトを取得するためにコードを少し変更する必要があります。 –

0

なぜ選択前の文字列とその後に続く文字列を知りたいのかわかりません。基本的には、これらの2つの文字列が一緒にページ全体から選択を差し引いたものになります。あなたは、どちらかの側で包み、選択したテキストがあるの検証を追加する必要があり、私の頭の上からhttp://www.quirksmode.org/dom/range_intro.html

0

: 私たちはそのelemはがテキストボックスであるとしましょう:

if (elem.getSelection) { 
     sel = elem.getSelection(); 
     if (sel.rangeCount) { 
      selectedText=sel.getRangeAt(0); 
     } 
    } else if (elem.selection) { 
     selectedText=elem.selection.createRange(); 
    } 


var texts = elem.value.split(selectedText); 
var before = texts[0]; 
var after = texts[2]; 
ここ

は範囲に素晴らしい紹介です

OR

var text = element.value; 
var before = text.substring(0,text.indexOf(selectedText)); 
var after = text.replace(before + selectedtext,''); // or after = text.substring(before.length + selectedText.length); 
+0

問題の元のコードは、OPは、正規コンテンツ内の選択肢に興味があることを示唆している、そしてそのコードはのみで動作します'elem'が' Document'オブジェクトであれば最初です。また、コードは、テキストボックスやテキストエリアではなく、通常のコンテンツ内の選択にのみ適用されます。最後に、テキストボックスの「値」内の選択されたテキストの検索は、選択されたテキストが複数回簡単に出現する可能性があるため、信頼性がありません。 –

+0

良い点、上記のサンプルの制限であるべきTim。 – jerjer

関連する問題