2014-03-31 65 views
1

jquery .replace()不能處理長文本。 如果您突出顯示一些單詞的所有功能,但是如果選擇所有文本都不起作用。jquery替換不能使用長文本

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

回答

3

這並不是說是一個問題,但在你的選擇返回的文本,並通過html返回的源文本之間的間距,而不一致的長度。例如,在您的原始HTML你有這樣的:

fallback to users JavaScript disabled 

注意到有JavaScript前2位。但是,在由您的選擇返回的文本中,這些空間被標準化爲一個空格。

您可能會遇到類似的問題,與任何其他空白,行返回等,當然與任何嵌入的HTML標記。文本選擇將返回看到的文本,而不是它在源標記中的文本。