3

window.getSelection()を使用して、選択したテキストを取得しています。しかし、私も画像を選択すると、画像のすべても返されます。

例:

<img src="someSrc.jpg" alt="image_alt" /> My text here ... 

私も画像を選択すると、

image_altここに私のテキスト..。

しかし、私は必要なだけです

ここに私のテキスト...

altなしでテキストのみを取得する方法はありますか?

どうもありがとう

4

2 に答える 2

7

これを試して:

window.getTextSelection = function() {
    //First get HTML Fragment of selection
    var html = window.getSelection().getRangeAt(0).cloneContents(); 
    //Return only the text
    return html.textContent||html.innerText;
}

場合によっては、CSSを介してユーザー選択を無効にすることができます。画像のユーザー選択を無効にすることでこれを実現することもできます。

img {
        -webkit-user-select: none;
        -khtml-user-select: none;
        -moz-user-select: none;
        -o-user-select: none;
        user-select: none;
}
于 2011-08-31T12:21:25.207 に答える
1

最も簡単な方法はtoString()、選択の範囲の方法を使用することです。これは、 WHATWGの新しい範囲仕様のwindow.getSelection().toString()現在のバージョンで実行するように指定されています(ただし、これは一部のブラウザーの実行とは逆であり、変更される場合とされない場合があります)。以下は、複数の選択された範囲(Mozillaがサポート)およびIE<9で機能します。

jsFiddle: http: //jsfiddle.net/timdown/HkP2S/

コード:

function getSelectionRangeText() {
    var selText = "";
    if (window.getSelection) {
        var sel = window.getSelection(), rangeCount = sel.rangeCount;
        if (rangeCount) {
            for (var i = 0, rangeTexts = []; i < rangeCount; ++i) {
                rangeTexts.push("" + sel.getRangeAt(i));
            }
            selText = rangeTexts.join("");
        }
    } else if (document.selection && document.selection.type == "Text") {
        selText = document.selection.createRange().text;
    }
    return selText;
}

アップデート

このソリューションには、内部のテキスト<script><style>要素が含まれます。これを削除するには、選択範囲で使用して、結果のドキュメントフラグメントのDOMをトラバースし、要素cloneContents()に含まれていないテキストノードからのみテキストを収集します。これを拡張して、CSSの要素内にあるテキストを削除することもできます。<script><style>display: none

jsFiddle: http: //jsfiddle.net/timdown/HkP2S/2/

コード:

function getSelectionRangeText() {
    var selText = "", selTextParts = [];

    function getNodeText(node) {
        if (node.nodeType == 3) {
            selTextParts.push(node.data);
        } else if (node.hasChildNodes()
        && !(node.nodeType == 1 && /^(script|style)$/i.test(node.tagName))) {
            for (var child = node.firstChild; !!child; child = child.nextSibling) {
                getNodeText(child);
            }
        }
    }

    if (window.getSelection) {
        var sel = window.getSelection(), rangeCount = sel.rangeCount;
        if (rangeCount) {
            for (var i = 0; i < rangeCount; ++i) {
                getNodeText(sel.getRangeAt(i).cloneContents());
            }
            selText = selTextParts.join("");
        }
    } else if (document.selection && document.selection.type == "Text") {
        selText = document.selection.createRange().text;
    }
    return selText;
}
于 2011-08-31T13:57:34.833 に答える