Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/75.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JQuery/Javascript—突出显示文本并环绕标记,而不更改html结构_Javascript_Jquery_Html_Text_Highlight - Fatal编程技术网

JQuery/Javascript—突出显示文本并环绕标记,而不更改html结构

JQuery/Javascript—突出显示文本并环绕标记,而不更改html结构,javascript,jquery,html,text,highlight,Javascript,Jquery,Html,Text,Highlight,我正在尝试制作一个程序,用户可以在其中突出显示要注释的文本。 我希望无论用户在哪里突出显示文本,文本都保持不变 类似于此网站的内容: 当我试图突出显示一些html标记中的文本时,它会按照我的意愿工作。 但当我在一个或多个html标记上突出显示文本时,html结构会发生变化。我希望所有的html标签都能使用它,因为html结构可能会有所不同。有没有办法防止这种情况 这是我做的一把小提琴,以防我说不清楚: 对不起我的英语 function highlightText(){ var selected

我正在尝试制作一个程序,用户可以在其中突出显示要注释的文本。 我希望无论用户在哪里突出显示文本,文本都保持不变

类似于此网站的内容:

当我试图突出显示一些html标记中的文本时,它会按照我的意愿工作。 但当我在一个或多个html标记上突出显示文本时,html结构会发生变化。我希望所有的html标签都能使用它,因为html结构可能会有所不同。有没有办法防止这种情况

这是我做的一把小提琴,以防我说不清楚:

对不起我的英语

function highlightText(){

var selectedText, selectionEl, sel, range;

if (typeof window.getSelection != "undefined") {
    selectedText = window.getSelection().toString();
} 
else if (typeof document.selection != "undefined" && document.selection.type == "Text") {
    selectedText = document.selection.createRange().text;
}

if (document.selection && document.selection.createRange) {

    range = document.selection.createRange().duplicate();
    range.collapse(false);

} else if (window.getSelection) {
    sel = window.getSelection();

    if (sel.getRangeAt) {
        range = sel.getRangeAt(0).cloneRange();

    } else {
        range.setStart(sel.anchorNode, sel.anchorOffset);
        range.setEnd(sel.focusNode, sel.focusOffset);

        if (range.collapsed !== sel.isCollapsed) {
            range.setStart(sel.focusNode, sel.focusOffset);
            range.setEnd(sel.anchorNode, sel.anchorOffset);
        }
    }

  var a = document.createElement('a');
  a.textContent = selectedText;
  a.href = "#";

  range.deleteContents();
  range.insertNode(a);
  range.collapse(false);
}
}

$("#article").mouseup(function(){
   highlightText();
});

有两种方法可以解决这个问题

  • 使用
    标记来分隔段落,而不是使用标记

    例:

  • 选择文本时,请创建多个a标记

  • 这:

    我的(选择开始)厄运文本

    更多文本(选择结束)和其他内容

    将成为:

    <p>My text of <a href="">doom.</a ></p>
    <p><a href="">More text</a> and what not </p>
    
    我的文本和其他内容


    第二种方法更简单,但只适用于段落标记。如果您也打算使用span标记,那么第二个选项是您的最佳选择。

    有两种方法可以解决此问题

  • 使用
    标记来分隔段落,而不是使用标记

    例:

  • 选择文本时,请创建多个a标记

  • 这:

    我的(选择开始)厄运文本

    更多文本(选择结束)和其他内容

    将成为:

    <p>My text of <a href="">doom.</a ></p>
    <p><a href="">More text</a> and what not </p>
    
    我的文本和其他内容


    第二种方法更简单,但只适用于段落标记。如果您还想使用span标签,那么第二个选项是您的最佳选择。

    谢谢!您知道是否可以用document.ready上的
    替换所有p标签?我尝试了这个,但它只适用于b,但问题仍然存在。修复了它。再次感谢!非常感谢。您知道是否可以用document.ready上的
    替换所有p标签?我尝试了这个,但它只适用于b,但问题仍然存在。修复了它。再次感谢!