0

JS小提琴

JS

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;
        }
    }
    console.log(html);  <-- returning text even not selected.
}

$(document).ready(function(){
        $(document).bind("mouseup", getSelectionHtml);
});

我目前正在尝试了解以下行为:

1)选择几行文本(console.log 显示这些行) - 预期。

2) 在您所做的选择中单击。Console.log 然后显示与前一个相同的文本,该文本被选中。- 没有预期;在这里,我希望 getSelection 不会返回任何内容,因为当前没有选择任何内容。

谁能告诉我我在这里缺少什么?

谢谢!

4

1 回答 1

1

演示 jsFiddle

JS

var previousText = '';
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;
        }
    }
    if(html!= previousText) {
        console.log(html);
    }
    previousText = html;
}

$(document).mousedown(function () {}).mouseup( function () {
    getSelectionHtml();
});

要不显示空选择,只需更改:

if(html!= previousText) {

对此:

if(html!= previousText && html != '') {

注意:我使用 jQuery 因为你也是

于 2013-08-21T05:12:01.017 回答