我如何使用JavaScript检测
<br>
<br>
<br>
成为一体
<br>
我尝试了:
jQuery('body').html().replace(/(\<br\>\r\n){3, }/g,"\n");
但是对我来说这并不起作用。
我如何使用JavaScript检测
<br>
<br>
<br>
成为一体
<br>
我尝试了:
jQuery('body').html().replace(/(\<br\>\r\n){3, }/g,"\n");
但是对我来说这并不起作用。
如果你想在页面上禁用多个<br>
的效果,你可以通过CSS而不使用JavaScript来实现:
br + br { display: none; }
然而,当您使用标签时,这种方法是理想的,就像这样:
<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 解决方案。
// 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';
}
}
};
<br>
,如果它们之间没有标签的话:http://jsfiddle.net/ahMMv/13/ - zch发送不需要的HTML代码到客户端浏览器并让它运行JavaScript清理它的目的是什么?这看起来像是一个糟糕的设计。
为什么不修复所有静态HTML和HTML生成,以便这些多余的<br>
元素在第一次出现时就不会出现呢?
如果您使用JavaScript修改文档对象,请这样做以获得无法通过其他方式实现的动态效果。
<br>
标签已经是由 Javascript 创建的。 - Uooo简化版:
var newText = oldText.replace(/(<br\s*\/?>){3,}/gi, '<br>');
这将允许可选的标签终止符(/>)以及标签结束前的空格(例如<br />
或<br >
)。
text = 'abc def'; text.replace('def', 'ghi');
text
现在没有改变!但是 text = text.replace('def', 'ghi');
现在 text
已经被改变了。 - marekful.replace()
方法并不会改变原始值。你必须将replace
方法的返回值赋值给原始变量。 - marekful$('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();
}
});
while (node = node.previousSibling) { if (node.nodeType !== Node.TEXT_NODE || node.nodeValue.trim() !== '') { break; }; }
- Simon这样的做法是否正确:
$("br~br").remove()
编辑:不,这是错误的,因为它对“连续”的定义太宽松了,正如BoltClock所说。
<br>
元素不是连续的,但这会删除<br><hr><br><hr>
中的第二个<br>
。根据使用情况,可能并不希望这样做。 - BoltClock.replace(/(<br\s*\/?>\s*)+/g, "<br>\n")
,它可以处理各种间距和换行符。此外,替换后也会换行。我建议用<br />\n
进行替换,但他似乎不喜欢自闭合标签。 - Suamerebody
内部的任何事件处理程序都将被删除。在我看来,这不是一个好主意。 - lonesomeday$('body').html($('body').html().replace(/<br\W?\\?>(\W?(<br\W?\\?>)+)+/g,"<br>"));
然而,在阅读了这里另一篇帖子中的评论后,我认为你应该尽量避免这样做,除非你可以在后端进行更正。
<br>
标签的 任何 数量替换为一个标签。这适用于字符串中多个标签的多个实例。/(<br>*)+/g
String.replace
方法:myString.replace(/(<br>*)+/g, "<br/>");
如果要替换多个 <br/>
标签,请在正则表达式中添加 /
:
/(<br\/>*)+/g
试试这个:
jQuery('body').html(
jQuery('body').html().replace(/(?:<br>\s+){3,}/ig,"\n"));
);
演示: jsfiddle
<br>
替换为换行符\n
。将其更改为<br>
,你就没问题了。 - yardarrat
<br>
,那么为什么一开始就加了它们呢? - RoToRa