Как я могу вставить текст каждые n символов, которые не находятся между двумя конкретными частями текста?

0

У меня есть html, что я готов вставить в dom. Прежде чем я это сделаю, мне нужно вставить тег каждые 30 символов. Это очень легко сделать примерно так:

var html = html.replace(/(.{30})/g, '$1<wbr>');

Однако это простое решение часто вставляет тег в существующий тег html. Например, это может закончиться:

<spa<wbr>n> Some text here </span>

В html может быть много детей так:

<div>
    This is some text that we need to treat. <br />
    <span> Here is some more text. <a href="#"> Click here. </a> </span>
</div>

Какой лучший способ приблизиться к этому? Является ли regex возможным решением? Или мне нужно написать функцию javascript? Я надеялся, что смогу выяснить, как написать регулярное выражение, подобное приведенному выше, которое вставляет текст в каждое n символов, ЕСЛИ оно не должно быть между символами "<" и ">".

Любая помощь приветствуется.

  • 0
    Не replace в строке HTML. Просто перетащите все текстовые узлы вашего дерева DOM и разбейте их на части.
  • 0
    С какой проблемой вы сталкиваетесь? Разве не должно быть решения CSS?
Показать ещё 6 комментариев
Теги:

2 ответа

0
Лучший ответ

Вот мое решение. Обычно я не хотел бы использовать jquery, но время имеет значение.

var el = $('<div>' + html + '</div>');
var allChildren = el.find('*');

allChildren.each(function() {
    for(var i = 0, len = this.childNodes.length; i < len; i++) {
        if(this.childNodes[i].nodeType === 3) {
            var newHtml = this.childNodes[i].nodeValue.replace(/(.{30})/g, '$1<wbr>');
            $(this.childNodes[i]).replaceWith(newHtml);
        }
    }
});

html = el.html();
0

Вы можете использовать это:

(.{30}.*?\s)

Пример рабочего регулярного выражения:

http://regex101.com/r/nL0qT2

Javascript:

var html = html.replace(/(.{30}.*?\s)/g, '$1<br />');

Так что это будет вставить <br> метки на следующем ниже месте после 30 - го символа, поэтому <br> не вставляется внутрь какого - либо слова или меток.

  • 0
    Если вы не знаете, есть внутренний HTML. Тогда это не каждые 30 символов.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню