заменить повторяющиеся HTML-теги в JavaScript - PullRequest
0 голосов
/ 26 февраля 2019

Я использую редактор quill.js, чтобы пользователи могли оставлять комментарии.Проблема с quill.js заключается в том, что если они нажимают ввод, генерируется новый параф.

<p><br></p>

Это позволяет им создавать бесконечные новые линии.Например, ввод:

fffff ffff fff
fff


fffffff



ff

сгенерирует этот html:

<p>fffff ffff fff</p>
<p>fff</p>
<p><br></p>
<p><br></p>
<p>fffffff</p>
<p><br></p>
<p><br></p>
<p><br></p>
<p>ff</p>

Но я хочу получить такой результат:

<p>fffff ffff fff</p>
<p>fff</p>
<p><br></p>
<p>fffffff</p>
<p><br></p>
<p>ff</p>

, так что еслиКод новой строки повторяется, его следует заменить одной новой строкой.Как мне это сделать?

Ответы [ 2 ]

0 голосов
/ 26 февраля 2019

Вы можете проверить, есть ли два или более вхождений <p><br></p>, за которым следует новая строка, и если да, то вы замените его на один, например, так:

const markup = `
<p>fffff ffff fff</p>
<p>fff</p>
<p><br></p>
<p><br></p>
<p>fffffff</p>
<p><br></p>
<p><br></p>
<p><br></p>
<p>ff</p>
<p><br></p>
`;

const result = markup.replace(/(<p><br><\/p>\n){2,}/g, '<p><br><\/p>\n');

console.log(result);

Вы можете даже до:

const markup = `
<p>fffff ffff fff</p>
<p>fff</p>
<p><br></p>
<p><br></p>
<p>fffffff</p>
<p><br></p>
<p><br></p>
<p><br></p>
<p>ff</p>
<p><br></p>
`;

const target = '<p><br><\/p>\n';

const result = markup.replace(new RegExp(`(${target}){2,}`, 'g'), target);

console.log(result);

Таким образом, вы можете легко изменить элемент в будущем.

0 голосов
/ 26 февраля 2019

Если у вас действительно нет других вариантов, то вы можете сделать что-то вроде этого:

function cleanupHtml() {
  document.body.innerHTML = document.body.innerHTML.replace(/<p><br><\/p>/gi, '');
}

document.addEventListener('DOMContentLoaded', cleanupHtml);
<p>fffff ffff fff</p>
<p>fff</p>
<p><br></p>
<p><br></p>
<p>fffffff</p>
<p><br></p>
<p><br></p>
<p><br></p>
<p>ff</p>
...