gpt4 book ai didi

javascript - window.getSelection() 用 HTML 标签偏移?

转载 作者:数据小太阳 更新时间:2023-10-29 06:12:26 26 4
gpt4 key购买 nike

如果我有以下 HTML:

<div class="content">
Vivamus <span>luctus</span> urna sed urna ultricies ac tempor dui sagittis.
</div>

我在 mouseup 上举办了一场事件查看所选文本的范围:

$(".content").on("mouseup", function () {
var start = window.getSelection().baseOffset;
var end = window.getSelection().focusOffset;
if (start < end) {
var start = window.getSelection().baseOffset;
var end = window.getSelection().focusOffset;
} else {
var start = window.getSelection().focusOffset;
var end = window.getSelection().baseOffset;
}
console.log(window.getSelection());
console.log(start + ", " + end);
});

然后我选择单词 Vivamus从内容中,它将记录 1, 8 ,因为这是选择的范围。

如果,但是,我选择了单词 urna ,它会记录 15, 20 , 但不会考虑 <span> HTML 的元素。

有没有 focusOffsetbaseOffset也算作 HTML 标记,而不仅仅是文本?

最佳答案

更新

实例:http://jsfiddle.net/FLwxj/61/

Using a clearSelection() functiona replace approach , 我能够达到预期的结果。

var txt = $('#Text').html();
$('#Text').html(
txt.replace(/<\/span>(?:\s)*<span class="highlight">/g, '')
);
clearSelection();

来源:


您将在下面找到一些针对您的问题的有效解决方案。我按照代码效率的顺序排列它们。

可行的解决方案

  • https://stackoverflow.com/a/8697302/1085891 ( live example )

    window.highlight = function() {
    var selection = window.getSelection().getRangeAt(0);
    var selectedText = selection.extractContents();
    var span = document.createElement("span");
    span.style.backgroundColor = "yellow";
    span.appendChild(selectedText);
    span.onclick = function (ev) {
    this.parentNode.insertBefore(
    document.createTextNode(this.innerHTML),
    this
    );
    this.parentNode.removeChild(this);
    }
    selection.insertNode(span);
    }
  • https://stackoverflow.com/a/1623974/1085891 ( live example )

    $(".content").on("mouseup", function () {
    makeEditableAndHighlight('yellow');
    });

    function makeEditableAndHighlight(colour) {
    sel = window.getSelection();
    if (sel.rangeCount && sel.getRangeAt) {
    range = sel.getRangeAt(0);
    }
    document.designMode = "on";
    if (range) {
    sel.removeAllRanges();
    sel.addRange(range);
    }
    // Use HiliteColor since some browsers apply BackColor to the whole block
    if (!document.execCommand("HiliteColor", false, colour)) {
    document.execCommand("BackColor", false, colour);
    }
    document.designMode = "off";
    }

    function highlight(colour) {
    var range, sel;
    if (window.getSelection) {
    // IE9 and non-IE
    try {
    if (!document.execCommand("BackColor", false, colour)) {
    makeEditableAndHighlight(colour);
    }
    } catch (ex) {
    makeEditableAndHighlight(colour)
    }
    } else if (document.selection && document.selection.createRange) {
    // IE <= 8 case
    range = document.selection.createRange();
    range.execCommand("BackColor", false, colour);
    }
    }
  • https://stackoverflow.com/a/12823606/1085891 ( live example )

其他有用的解决方案:

关于javascript - window.getSelection() 用 HTML 标签偏移?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15181471/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com