2015-01-01 37 views
4

我試圖通過用span來包圍它來替換一些文本。試圖在飛行中替換字符串,最好的方法是什麼?

例子:

的人是打字,當他們鍵入單詞「倒退」和他的空間,它使整個句子或符合它這個詞大膽了。

現在我有一個CSS類的設置,我一直試圖把它放到一個跨度,但我不確定這是否有效......它也重置任何時候發生新的事情,所以光標跳轉回到開始,它不讓我前進。

這是我迄今(我正則表達式是錯誤的,現在也是如此):

function replace(e) { 
 
    if (e.keyCode == 13) { 
 
    element = document.getElementById("script"); 
 
    rg = /^INT/; 
 
    element.innerHTML = element.innerHTML.replace(
 
     rg, 
 
     '<span id="bold">$1</span>' 
 
    ); 
 
    }; 
 
};
<div contenteditable="true" id="script" style="width: 100%; height: 500px; border: 1px solid black;" onkeydown="replace(event)"> 
 
    Replace 
 
</div>

+1

你的正則表達式查找INT在字符串的開頭,由於'^' 。通過將它包含在括號中來捕獲INT。您的替換功能現在只在退貨後觸發。這是故意的? – Mouser

回答

1

正如@Mouser提到的,你的正則表達式將尋找INT在串開始。

這裏是正確的代碼。您只需根據您的需要修正RegEx。我已經測試過它和它的工作。

function replace(e) { 
    if (e.keyCode == 13) { 
    element = document.getElementById("script"); 
    var _str = element.innerHTML.trim("") 
    rg = /INT/; 
    element.innerHTML = _str.replace(
     rg, 
     function($1) { 
     console.log($1) 
      return '<h1><span id="bold">' + $1 + '</span></h1>' 
     } 
    ); 

    //Set cursor position 
    var range = document.createRange() 
    var _lastDom = element.childNodes[element.childNodes.length - 1]; 
    var end = ''; 
    if(_lastDom && _lastDom.innerHTML == undefined) { 
     end = _lastDom.length 
    } else { 
     _lastDom 
     end = 1 
    } 
    range.setStart(_lastDom,end) 
    range.setEnd(_lastDom,end) 
    sel = document.getSelection() 
    sel.removeAllRanges() 
    sel.addRange(range) 
    }; 
}; 
+0

$ 1在原始代碼中是正確的。這將產生錯誤@HarpreetSingh – Mouser

+0

@TyLieser - 請檢查我更新的答案 –

+0

替換中的匿名函數是不必要的:''

$ 1

''應該足夠作爲替換字符串。 – Mouser

0

可能的方式更好的方式來做到這一點,但這樣的事情可能會幫助

var thepara=document.getElementById('thepara').innerHTML; 
 

 
document.getElementById('thetext').addEventListener('keyup',function(e){ 
 
var thetext=this.value; 
 
var thelength=this.value.length; 
 
    
 
    var thestart=thepara.indexOf(thetext); 
 
    var found=thepara.substr(thestart,thelength); 
 
    if(found != "n"){ 
 
    var newstring="<span class='bolded'>"+found+"</span>"; 
 
     document.getElementById('thepara').innerHTML=thepara.replace(found,newstring); 
 
    } 
 
    });
.bolded{font-weight:bold;}
<input type="text" id="thetext" /> 
 
<div id="thepara">It was a nice sunny day in the suburbs of South East London</div>

相關問題