jQuery选择文本并在段落中添加跨度

Mir*_*cea 6 jquery select text

我有一个获取所选文本的函数,通过鼠标选择文本,并将其添加到变量中.我想在所选文本中的变量周围添加标签 - 在该段落中.

$("p").live("mouseup",function() {
    selection = getSelectedText();
    if(selection.length >= 3) {
        var $spn = $("<span></span>").html(selection).addClass("selected");
        $("p").wrap($spn);
    }
});

//Grab selected text
function getSelectedText(){
    if(window.getSelection){
        return window.getSelection().toString();
    }
    else if(document.getSelection){
        return document.getSelection();
    }
    else if(document.selection){
        return document.selection.createRange().text;
    }
}
Run Code Online (Sandbox Code Playgroud)

我可以得到文本选择变量,但不是放置<span></span>段落中选定的文本<p>,我的函数将其包装在外面.

如何在段落中替换它?谢谢.

Mat*_*ens 5

这是出错的地方:

var $spn = $("<span></span>").html(selection).addClass("selected");
$("p").wrap($spn);
Run Code Online (Sandbox Code Playgroud)

这意味着你正在包裹span段落.

我认为你的意思是做这样的事情:

var spn = '<span class="selected">' + selection + '</span>';
$(this).html($(this).html().replace(selection, spn));
Run Code Online (Sandbox Code Playgroud)

  • 这段代码也有一个bug.如果您有多个单词出现,此代码将始终包装单词的第一个出现,而不是实际选定的文本. (3认同)
  • 得到它了!$(this).html($(this).html().replace(selection,spn)); 我把文字改成了html.谢谢大家的支持! (2认同)