3

メソッドをテストしてgetSelection()いて、プログラムで選択したテキストをテキストの特定の段落で取得し、それをdivタグで表示するようにしたかったのです。次のコードを使用しました。

var txt = document.getSelection();
document.getElementById("display").innerHTML = "The text you have selected is: " + txt + ".";

ただし、プログラムで、ドキュメント全体ではなく、段落自体で行われた選択のみを取得するようにします。使ってみdocument.getElementById("id").getSelection();ましたがうまくいきませんでした。

getSelection()特定の要素にのみ適用されるようにするにはどうすればよいですか?

4

3 に答える 3

3

Chromium 19でのみテストされた1つのアプローチがあります(これはtextContent、Internet ExplorerをサポートしinnerTextているため、代わりに使用する必要があります)。

function getSelectedText() {
    if (window.getSelection) {
        return window.getSelection().toString();
    } else if (document.selection) {
        return document.selection.createRange().text;
    }
    return '';
}

var b = document.getElementsByTagName('body')[0],
    o = document.getElementById('output');

b.onmouseup = function(e){
    var selText = getSelectedText(),
        targetElem = e.target.tagName.toLowerCase();
    if (selText && targetElem == 'p') {
        o.textContent = 'You selected the text: "' + selText + '" from a ' + targetElem + ' element.';
    }
};​

JSフィドルデモ

于 2012-08-05T23:51:34.713 に答える
3

getSelection()windowおよびのメソッドとしてのみ使用できますdocument。特定のノード内にあるユーザー選択の一部のみを表す範囲を取得したい場合は、Rangyライブラリを使用してそれを行う関数があります(ライブラリなしで実行するコードは長くなり、私の熱意を超えています今すぐ書く):

function getSelectedRangeWithin(el) {
    var selectedRange = null;
    var sel = rangy.getSelection();
    var elRange = rangy.createRange();
    elRange.selectNodeContents(el);
    if (sel.rangeCount) {
        selectedRange = sel.getRangeAt(0).intersection(elRange);
    }
    elRange.detach();
    return selectedRange;
}
于 2012-08-06T00:30:16.437 に答える
0
function getSelected() {
    if(window.getSelection) { return window.getSelection(); }
        else if(document.getSelection) { return document.getSelection(); }
                    else {
                            var selection = document.selection && document.selection.createRange();
                            if(selection.text) { return selection.text; }
                return false;
            }
            return false;
        }

コーヒースクリプトで書かれた:

getSelected = ->
  if window.getSelection
    return window.getSelection()
  else if document.getSelection
    return document.getSelection()
  else
    selection = document.selection and document.selection.createRange()
    return selection.text  if selection.text
    return false
  false

おいしいJavaScript

于 2012-08-05T23:46:32.810 に答える