window.getSelection()を使用して、選択したテキストを取得しています。しかし、私も画像を選択すると、画像のすべても返されます。
例:
<img src="someSrc.jpg" alt="image_alt" /> My text here ...
私も画像を選択すると、
image_altここに私のテキスト..。
しかし、私は必要なだけです
ここに私のテキスト...
altなしでテキストのみを取得する方法はありますか?
どうもありがとう
window.getSelection()を使用して、選択したテキストを取得しています。しかし、私も画像を選択すると、画像のすべても返されます。
例:
<img src="someSrc.jpg" alt="image_alt" /> My text here ...
私も画像を選択すると、
image_altここに私のテキスト..。
しかし、私は必要なだけです
ここに私のテキスト...
altなしでテキストのみを取得する方法はありますか?
どうもありがとう
これを試して:
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;
}
最も簡単な方法は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;
}