#javascript #jquery #replace #wysiwyg
#javascript #jquery #заменить #wysiwyg
Вопрос:
мой html.
<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,'amp;<')
.replace(/>/g,'amp;>')
.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:
Есть куча символов, которые нужно экранировать в регулярном выражении. Я повозился с этим и сделал эту демонстрацию
О, и использование live
, похоже, сначала не помогло мне, поэтому я переключил его на bind
и просто забыл переключить его обратно … это действительно необходимо?
var wysiwyg_val;
$('.wysiwyg textarea').bind('keyup', function() {
wysiwyg_val = $(this).val()
.replace(/n/g, "<br>")
.replace(/<br/>/g, '[br]')
.replace(/</g, 'amp;<')
.replace(/>/g, 'amp;>')
.replace(/{code}/g, '<pre class="prettyprint"><code>')
.replace(/{/code}/g, '</code></pre>')
.replace(/[br]/g, '<br>');
$('.wysiwyg-preview').html(wysiwyg_val);
});
Я не уверен, почему n
они заменяются <br>
затем изменением экранирования угловых скобок, потому что вы можете видеть их в результате, может быть, преобразовать n
в конце блока замены?
Комментарии:
1. ну, ваш код действительно в порядке, и беспорядок был в этих 2 строках .replace(/{code}/g, ‘<pre class=»prettyprint»><code>’) .replace(/{/code}/g, ‘</code></pre>’)
2. я обратился к live() просто потому, что иногда я $.load() динамически модули, в которых есть этот скрипт внутри: P
3. Я запустил код через JSLint, и ему не нравится использовать
.
внутри регулярных выражений, поэтому я подумал, почему бы просто не разделить эту строку на две.4. «.» где? .replace() вы имеете в виду?
5. В этом оригинале заменить
.replace(/{code}(.*){/code}/g, '<pre class="prettyprint"><code>$1</code></pre>')