我使用window.getSelection ()获取选定的文本。但是,如果我也选择了一个图像,它也会返回图像的一部分。
例子:
<img src="someSrc.jpg" alt="image_alt" /> My text here ... 如果我也选择了一个图像,它就会返回
image_alt我的短信..。
但我只需要
我这里的短信..。
有没有办法只得到文字,没有alt?
非常感谢
发布于 2011-08-31 13:57:34
最简单的方法是使用选择范围的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>元素中的文本。要删除这一点,您可以在选择范围内使用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;
}发布于 2011-08-31 12:21:25
试试这个:
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;
}https://stackoverflow.com/questions/7256608
复制相似问题