首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >getSelection中没有alt属性和脚本吗?

getSelection中没有alt属性和脚本吗?
EN

Stack Overflow用户
提问于 2011-08-31 11:58:45
回答 2查看 890关注 0票数 3

我使用window.getSelection ()获取选定的文本。但是,如果我也选择了一个图像,它也会返回图像的一部分。

例子:

代码语言:javascript
复制
<img src="someSrc.jpg" alt="image_alt" /> My text here ... 

如果我也选择了一个图像,它就会返回

image_alt我的短信..。

但我只需要

我这里的短信..。

有没有办法只得到文字,没有alt?

非常感谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-08-31 13:57:34

最简单的方法是使用选择范围的toString()方法,这是在当前版本的WHATWG的新系列规格中指定的window.getSelection().toString() (尽管这是与某些浏览器相反,并且可能更改或不更改)。以下内容将适用于多个选定的范围( Mozilla支持的范围),也适用于IE < 9。

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

代码:

代码语言:javascript
复制
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/

代码:

代码语言:javascript
复制
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;
}
票数 1
EN

Stack Overflow用户

发布于 2011-08-31 12:21:25

试试这个:

代码语言:javascript
复制
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简单地禁用用户选择:如果您也可以通过禁用图像的用户选择来实现这一点:

代码语言:javascript
复制
img {
        -webkit-user-select: none;
        -khtml-user-select: none;
        -moz-user-select: none;
        -o-user-select: none;
        user-select: none;
}
票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7256608

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档