Jquery替换不适用于长文本

时间:2014-03-31 18:30:38

标签: jquery replace

Jquery .replace()无法使用长文本。 如果你突出显示几个单词一切正常,但如果选择所有文字都不起作用。

//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;
    }
}

$("p").on("mouseup",function() {
    selection = getSelectedText();
});

$(".add-h1").on("click",function(e) {
  e.preventDefault();
  alert(selection);
  if(selection.length >= 1) {
  var repl = '</p><h1>' + selection + '</h1><p>';
  $('body').html($('body').html().replace(selection, repl));
  selection = "";
  }
});

Fiddle

1 个答案:

答案 0 :(得分:3)

长度不是问题,而是选择返回的文本与html返回的源中的文本之间的间距不一致。例如,在您的原始HTML中,您有:

fallback to users  JavaScript disabled

请注意JavaScript之前有2个空格。但是,在您选择的返回文本中,这些空格将标准化为单个空格。

您可能会遇到与其他任何空格,行返回等类似的问题,当然还有任何嵌入式html标记。文本选择返回看到的文本,而不是源标记中的文本。