21

我有以下非常简单的 html 页面:

<html>
    <head>
    <script type="text/javascript">
        function alertSelection()
        {
            var selection = window.getSelection();
            var txt = selection.toString();
            alert(txt);
        }
    </script>
    </head>
    <body>
        This is <span style="background-color:black;color:white">the</span> text.
        <div style="background-color:green;width:30px;height:30px;margin:30px"
            onmouseover="alertSelection()">
    </body>
</html>

当我选择整个第一行并将鼠标悬停在正方形上时,我会收到“这是文本。”的警报。

我将如何解决此问题,以便不会从警报消息中删除 span 标签或任何其他选定的 HTML?

编辑:我正在专门寻找如何从window.getSelection(). 警报对话框正是我尝试验证代码的方式。我只关心在 Safari 中的工作。

4

3 回答 3

67

这是一个函数,它将为您提供与所有主要浏览器中当前选择相对应的 HTML:

function getSelectionHtml() {
    var html = "";
    if (typeof window.getSelection != "undefined") {
        var sel = window.getSelection();
        if (sel.rangeCount) {
            var container = document.createElement("div");
            for (var i = 0, len = sel.rangeCount; i < len; ++i) {
                container.appendChild(sel.getRangeAt(i).cloneContents());
            }
            html = container.innerHTML;
        }
    } else if (typeof document.selection != "undefined") {
        if (document.selection.type == "Text") {
            html = document.selection.createRange().htmlText;
        }
    }
    return html;
}

alert(getSelectionHtml());
于 2011-01-10T23:45:34.177 回答
10

使用 Rangy:https ://github.com/timdown/rangy

跨浏览器范围和选择库。

在此处查看演示:http ://rangy.googlecode.com/svn/trunk/demos/index.html

于 2011-01-10T23:47:17.167 回答
2

警报框不显示 HTML,只显示纯文本。您无法让 HTML 显示在警告框中。

可以做的是使用一些 JS 警报框替换而不是alert,例如jQuery Dialog、jQuery 插件或完全其他的东西。

于 2011-01-10T23:32:52.410 回答