RU EN

Как вырезать <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];
Комментариев: 0
18.12.2011 18:58