我正在使用 window.getSelection () 来获取选定的文本。但是,如果我也选择了一个图像,它也会返回一个图像的 altof。
例子:
<img src="someSrc.jpg" alt="image_alt" /> My text here ...
如果我也选择一个图像,它会返回
image_alt 我的文字在这里...
但我只需要
我的文字在这里...
有没有办法只得到文本,没有alt?
非常感谢
我正在使用 window.getSelection () 来获取选定的文本。但是,如果我也选择了一个图像,它也会返回一个图像的 altof。
例子:
<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()
选择的 Range(s) 方法,这是在WHATWG 的新 Range 规范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>
元素。要删除它,您可以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;
}