2010-07-19 51 views
16

我正在嘗試創建一個textarea,它將突出顯示用戶鍵入的一些關鍵字。我理解textarea只能支持純文本,並且我必須使用「富文本」編輯器才能實現此目的。我想要一些非常簡單的東西,而不是那些臃腫的'富有編輯'。有任何想法嗎?當你在textarea上鍵入時突出顯示文本

謝謝!

+0

你的意思是,你輸入的東西,它試圖猜你在找什麼? – Henryz 2010-08-04 09:02:37

回答

13

這裏是一個片段,讓你什麼都在尋找知識:

<style> 
    .textarea { font-family:arial; font-size:12px; border:0; width:700px; height:200px; } 
    .realTextarea { margin:0; background:transparent; position: absolute; z-index:999; } 
    .overlayTextarea { margin:0; position:absolute; top:1; left:1; z-index:998; } 
    .textareaBorder { border:groove 1px #ccc; position:relative; width:702px; height:202px; } 
    .highlight { background: yellow; } 
</style> 

<script> 
    var _terms = ['January', 'February', 'March']; // YOUR SEARCH TERMS GO HERE // 

    function preg_quote(str) { 
     return (str+'').replace(/([\\\.\+\*\?\[\^\]\$\(\)\{\}\=\!\<\>\|\:])/g, "\\$1"); 
    } 

    function doit() { 
     var s = myTextarea.value; 

     for (i=0; i<_terms.length; i++) 
      s = s.replace(new RegExp(preg_quote(_terms[i]), 'gi'), '<span class="highlight">' + _terms[i] + '</span>'); 

     myOtherTextarea.innerHTML = s.replace(new RegExp(preg_quote('\r'), 'gi'), '<br>'); 
    } 
</script> 

<div class="textarea textareaBorder"> 
    <textarea id="myTextarea" onkeyup="doit();" class="textarea realTextarea"></textarea> 
    <div id="myOtherTextarea" class="textarea overlayTextarea"></div> 
</div> 

的基本概念是<textarea>(頂部)是透明的,<div>下包含「富/在突出顯示」版。當涉及包裝文本時,還有改進的空間,但你明白了。快樂突出!

信用: 的preg_quote功能是由凱文·範Zonneveld http://kevin.vanzonneveld.net/techblog/article/javascript_equivalent_for_phps_preg_quote/

+0

太好了!這似乎是所有StackOverflow中的唯一答案,它實際上告訴你CodeMirror(和其他編輯器喜歡它!)的工作方式! :) – 2010-11-09 22:52:02