我正在使用window.getSelection()来获取所选文本。 但是,如果我也选择了一个图像,它也会返回一个图像。
实施例
<img src="someSrc.jpg" alt="image_alt" /> My text here ...
如果我也选择图像,则返回
image_alt我的文字在这里......
但我只需要
我的文字在这里......
有没有办法只获得文字,没有alt?
非常感谢
答案 0 :(得分: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;
}
答案 1 :(得分:1)
最简单的方法是使用选择范围的toString()
方法,这是在WHATWG's new Range spec的当前版本中指定window.getSelection().toString()
的方法(尽管这是contrary to what some browsers do并且可能会也可能不会改变)。以下内容适用于多个选定范围(Mozilla支持)以及IE&lt; 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>
元素内的文字。要删除它,您可以在选择范围上使用cloneContents()
并遍历生成的文档片段的DOM,仅从未包含在<script>
和<style>
元素中的文本节点收集文本。您还可以对此进行扩展,以删除具有CSS 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;
}