У меня есть область div, которая заполняется пользователями CMS и отправляет данные через текстовый редактор. Как я могу удалить последовательные br- теги более двух в <div>
с помощью jQuery?
Я попробовал parent()
, closest()
но это не сработало.
Например, пользователь CMS добавил этот HTML-код, используя богатый текстовый редактор.
<div class="cms-data">
<br>
<span>
<br><br><br><br><br><br>
<a href="/uploads/755/a1.xls" target="_blank">xls</span></a>
<br><br><br>
</span>
<br><br>
</div>
Изменить: я добавил имя класса в <div>
, cms-data.
Вот один из способов сделать это:
$("#starting-point").find("br").each(function() {
if (this.previousSibling && this.previousSibling.nodeName.toUpperCase() == 'BR') {
$(this).remove();
}
});
Это находит все элементы br
внутри данного контейнера (в моем случае, элемент с id
"starting-point"
). Затем он проходит через них в порядке документа. Если у нас есть тот, у которого есть непосредственный предыдущий брат, элемент br
, мы его удаляем. Мы оставляем его в покое, если вещь перед ним не является элементом br
(например, текстовым узлом или элементом non- br
). Обратите внимание, что это не считает <br> <br>
быть два элемента последовательными, потому что пространство между ними.
DOM!
Когда <br>
встречается, он удаляется. Когда текст или элемент встречаются, следующий <br>
не удаляется. Когда элемент встречается, на removeSequentialBR
вызывается removeSequentialBR
.
function removeSequentialBR(node) {
var child = node.firstChild;
var remove = true;
while (child) {
if (child.nodeType === 1) {
if (child.nodeName === "BR") {
if (remove) {
var newChild = child.nextSibling;
child.parentNode.removeChild(child);
child = newChild;
continue;
}
remove = true;
} else {
remove = false;
removeSequentialBR(child);
}
} else if (child.nodeType === 3 && /\S/.test(child.nodeValue)) {
remove = false;
}
child = child.nextSibling;
}
}
Вы можете использовать просто регулярное выражение для анализа текста и замены всех вхождений, которые не подходят
value = value.replace("/(<br>(\s)*){2,}/","<br><br>");
1000 является магическим большим числом, которое должно включать в себя все <br>
с; при необходимости увеличьте это значение. Может быть, существует неограниченная ценность? 0 может быть?
EDIT: Извините за плохой ответ. Я исправил это выражение. Теперь он работает правильно и находит все возможные варианты.
[[<br>]
не имеет смысла, \[<br>\s]
не имеет смысла, и почему это {12,1000}
1000 волшебно, конечно, но как насчет 12? В любом случае, вы можете отменить его с помощью \s{12,}
…
<br>
когда есть больше чем 1 в каждом месте?parent
илиclosest
родственник к элементам родного брата? И гдеdiv
вы упоминаете?