javascript:如何更改我的获取选择函数,以便不从选择中的第一个DOM元素中删除额外的空格?

Nul*_*uli 5 javascript jquery dom range

更新:显然,我遇到的问题只会影响选择中的第一个元素.

JSFiddle:http://jsfiddle.net/NhQCR/

我的代码从网页上进行选择:

if (!window.TB) {
    TB = {};
}

TB.Selector = {};
// http://stackoverflow.com/questions/5643635/how-to-get-selected-html-text-with-javascript
// and
// http://stackoverflow.com/questions/7690319/javascript-how-do-i-expand-a-user-selection-based-on-html-tags
TB.Selector.getSelected = function() {
    var html = "";
    if (typeof window.getSelection != "undefined") {
        var sel = window.getSelection();
        if (sel.rangeCount) {
            var range = sel.getRangeAt(0);

            var startEl = sel.anchorNode;
            if (startEl != range.commonAncestorContainer) {
                while (startEl.parentNode != range.commonAncestorContainer) {
                    startEl = startEl.parentNode;
                }
            }
            var endEl = sel.focusNode;
            if (endEl != range.commonAncestorContainer) {
                while (endEl.parentNode != range.commonAncestorContainer) {
                    endEl = endEl.parentNode;
                }
            }
            range.setStartBefore(startEl);
            range.setEndAfter(endEl);

            sel.addRange(range);

            var container = document.createElement("div");
            container.appendChild(sel.getRangeAt(0).cloneContents());

            html = container.innerHTML;
        }
    } else if (typeof document.selection != "undefined") {
        if (document.selection.type == "Text") {
            html = document.selection.createRange().htmlText;
        }
    }
    return html;
}
Run Code Online (Sandbox Code Playgroud)

以及我如何获得所选文本:

        var selected_text = TB.Selector.getSelected();
Run Code Online (Sandbox Code Playgroud)

不幸的是,如图所示,这种选择文本的方法删除了某些空白字符,并在选择的末尾添加了一个空div

在此输入图像描述

这就是网页上的选择: 在此输入图像描述

对于那些想知道:这是我得到警报以显示它的作用:

start_index = $j(".text_container").html().indexOf($selected_text);
end_index = start_index + $selected_text.length;
alert(start_index + " to " + end_index + "\n" + $selected_text + "\n=====================================\n" + $j(".text_container").html());
Run Code Online (Sandbox Code Playgroud)

目前,选择代码将扩展选择以确保没有不匹配的标签.我希望代码可以让我得到网页上的内容,而无需删除/添加任何内容= \我只是不知道从哪里开始= \

ros*_*lan 0

我无法重现第一个问题“9 之前的空白”,即使我使用它也可能是由于字符集或小绿党造成的。无论如何,我所有的选择都是从正确的点开始的。

<div></div>对于最后的第二个问题,只需替换

range.setEndAfter(endEl); 
Run Code Online (Sandbox Code Playgroud)

经过

range.setEndBefore(endEl);
Run Code Online (Sandbox Code Playgroud)

当您在数组中选择从 0 到 length-1 的内容时,这听起来很合理。