Как вырезать <br> в <pre> блоке TinyMCE
Озадачился проблемой вырезания тегов <br> в <pre> форматированном тексте TinyMCE. Вначале возник вариант:
<?php
preg_replace('/<pre.*(<br[^>]*>).*<//pre>/i', '\n', $var);
?>
Но данный пример вырежет единственный тег в блоке, да и не хотелось делать это на стороне сервера. Значит, нужно придумать JavaScript-обработку. Решение получилось не совсем элегантным, но работает с неограниченным кол-вом блоков <pre> и <br>-тегов в них:
var tmp = getElementById('text');
var tmp = tmp.value.split(<br />);
var l = tmp.length;
var txt = '';
if (l > 1) {
for (i = 0; i < l; i++) {
// Если в подстроке есть тег <pre>, вырезаем все <br>
if (tmp[i].indexOf('<pre') >= 0) {
// Добавляем строку с открывающим тегом <pre>
txt += (i > 0) ? '<br>' + tmp[i] : tmp[i];
i++;
// Следующего эл-та массива может и не быть
if (typeof tmp[i] != 'undefined') {
// Если в следующей подстроке тег не закрывается - добавляем "\r\n"
while (tmp[i].indexOf('</pre>') < 0) {
txt += "\r\n" + tmp[i];
i++;
}
// Добавляем строку с закрывающим тегом <pre>
txt += "\r\n" + tmp[i];
}
}
else
// Первой подстроке не добавляем <br>
txt += (i > 0) ? '<br>' + tmp[i] : tmp[i];
}
}
else
txt = tmp[0];
Янчарук А.В.
18.12.2011 18:58