2011-10-08 2 views
1

мой html.jQuery простой wysiwyg замены

<div class="wysiwyg"> 
<textarea></textarea> 
</div> 
<div class="wysiwyg-preview"></div> 

сейчас мой js.

var wysiwyg_val; 

    $('.wysiwyg textarea').live('keyup',function(){ 

     wysiwyg_val = $(this).val(); 

     wysiwyg_val = wysiwyg_val 
     .replace(/\n/g, "<br>") 
     .replace(/<br>/g,'[br]') 
     .replace(/\</g,'&lt;') 
     .replace(/\>/g,'&gt;') 
     .replace(/\{code}(.*){\/code}/g, '<pre class="prettyprint"><code>$1</code></pre>') 
     .replace(/\[br\]/g,'<br>'); 


     $('.wysiwyg-preview').html(wysiwyg_val); 



    }); 

я пытаюсь заменить {code} $content {/code} with <pre><code> $content </code></pre> и он работает, но он работает только в первый раз, что я поставил {code} some content{/code} в текстовом поле, а затем из второго раза, что я поставил же {code} some content{/code} он показывает все внутри первый <pre><code></code></pre>, как я могу приложить замену всем {code}$content{/code}, основанным не только на первом основании?

ответ

1

В регулярном выражении есть множество символов, которые необходимо выполнить в регулярном выражении. Я возился с ней и сделал this demo

Ох, и с помощью live, похоже, не сотрудничать со мной в первый, так что я включил его в bind и просто забыли переключить его обратно ... это действительно необходимо?

var wysiwyg_val; 

$('.wysiwyg textarea').bind('keyup', function() { 

    wysiwyg_val = $(this).val() 
     .replace(/\n/g, "<br>") 
     .replace(/\<br\/\>/g, '[br]') 
     .replace(/\</g, '&lt;') 
     .replace(/\>/g, '&gt;') 
     .replace(/\{code\}/g, '<pre class="prettyprint"><code>') 
     .replace(/\{\/code\}/g, '</code></pre>') 
     .replace(/\[br\]/g, '<br>'); 

    $('.wysiwyg-preview').html(wysiwyg_val); 

}); 

Я не знаю, почему \n заменяются <br> затем изменяя спасаясь угловые скобки, потому что вы можете увидеть их в результате, может преобразовать \n в конце блока замены?

+0

ну ваш код действительно нормально, и беспорядок был примерно в этих двух строках .replace (/ \ {code \}/g, '

') .replace(/\{\/code\}/g, '
') – sbaaaang

+0

i turn to live() просто вызывать иногда i $ .load() динамически модули, которые имеют этот скрипт внутри: P – sbaaaang

+0

Я запускал код через jsLint, и ему не нравится использовать '.' внутри регулярного выражения, поэтому я решил, почему бы не разделить эту строку на две. – Mottie

Смежные вопросы