Замените несколько ' s только одним
как использовать JavaScript для обнаружения
<br>
<br>
<br>
чтобы стать одним
<br>
?
Я старался с:
jQuery('body').html().replace(/(<br>rn){3, }/g,"n");
но это не работает для меня.
8 ответов:
проще:
var newText = oldText.replace(/(<br\s*\/?>){3,}/gi, '<br>');
Это позволит необязательный тег Терминатор ( / > ), а также пробелы до конца тега (например,
<br />
или<br >
).
CSS решение
если вы хотите отключить эффект несколько
<br>
на странице, вы можете сделать это с помощью CSS без использования JavaScript:br + br { display: none; }
- Регистрация демо jsFiddle.
однако этот метод идеально подходит, когда вы работаете с тегами, что-то вроде этого:
<div>Text</div><br /><br /><br /> <div>Text</div><br /><br /><br /> <div>Text</div><br /><br /><br />
в других случаях, вроде этого:
Hello World<br /> <br /> Hello World<br /> <br /> Hello World<br /> <br />
это плохо (как CSS передает текстовые узлы). Вместо этого используйте решение на JavaScript.
На JavaScript Решение
// It's better to wait for document ready instead of window.onload(). window.onload = function () { // Get all `br` tags, defined needed variables var br = document.getElementsByTagName('br'), l = br.length, i = 0, nextelem, elemname, include; // Loop through tags for (i; i < l - 1; i++) { // This flag indentify we should hide the next element or not include = false; // Getting next element nextelem = br[i].nextSibling; // Getting element name elemname = nextelem.nodeName.toLowerCase(); // If element name is `br`, set the flag as true. if (elemname == 'br') { include = true; } // If element name is `#text`, we face text node else if (elemname == '#text') { // If text node is only white space, we must pass it. // This is because of something like this: `<br /> <br />` if (! nextelem.data.replace(/\s+/g, '').length) { nextelem = br[i+1]; include = true; } } // If the element is flagged as true, hide it if (include) { nextelem.style.display = 'none'; } } };
- Регистрация демо jsFiddle.
какой смысл отправлять HTML, который находится в форме, которую вы не хотите, в браузер клиента и заставлять его работать JavaScript код, чтобы его убрать? Это выглядит как плохой дизайн.
Как насчет фиксации всех ваших статических HTML и HTML поколения, так что эти лишние
<br>
элементы не встречаются в первую очередь?Если вы используете JavaScript для изменения объекта документа, сделайте это для динамических эффектов, которые не могут быть достигнуты ни в одном другом путь.
не было бы что-то вроде этого правильный подход:
$("br~br").remove()
EDIT: нет, это неправильно, потому что его определение "смежного" слишком свободно, согласно BoltClock.
попробуй такое
$('body').html($('body').html().replace(/(<br>)+/g,"<br>"));
Он заменит номер N
<br>
в одну.
попробуйте это:
jQuery('body').html( jQuery('body').html().replace(/(?:<br>\s+){3,}/ig,"\n")); );
демо: jsfiddle
Я бы с этого:
$('body').html($('body').html().replace(/<br\W?\?>(\W?(<br\W?\?>)+)+/g,"<br>"));
однако, после прочтения комментариев в другом посте здесь я считаю, что вы должны попытаться избежать этого в случае, если вы можете исправить это в задней части.
это решение только для jQuery + DOM, не обрабатывает HTML как строку, работает с текстовыми узлами, игнорирует пробелы только текстовые узлы:
$('br').each(function () { const {nodeName} = this; let node = this; while (node = node.previousSibling) { if (node.nodeType !== Node.TEXT_NODE || node.nodeValue.trim() !== '') { break; }; } if (node && node !== this && node.nodeName === nodeName) { $(node).remove(); } });