我在这里玩小提琴:http://jsfiddle.net/dm9eebz9/
HTML
<div id="wrapper">
<p class="body">Line 1
<br>
<br>Line 3</p>
<p class="body">Line 1
<br>Line 2
<br>
<br>
<br>
<br>Line 6</p>
<p class="body">Line 1
<br>Line 2</p>
</div>Javascript/jQuery
$('#wrapper p.body').each(function () {
var temp = $(this).innerHTML;
this.innerHTML = temp.replace(/(<br>)+/gim, "<br>");
});我的目标是在两个以上的<br>出现时设法摆脱它们。然而,它似乎不认识临时的。这是操纵行为,还是我犯了一个明显的错误?
发布于 2014-09-05 13:49:57
jsfiddled:http://jsfiddle.net/pe6w7z1e/1/
其思想是:将有一个中断和一个/多个(一个/多个空间行走+中断) >>替换为仅一个中断
以下是修改后的代码:
$('p.body').each(function () {
var elem = $(this)
var temp = elem.html();
elem.html(temp.replace(/<br>(\s+<br>)+/img, "<br>"));
});如果它回答你的问题,请标记为答案。
我认为最好使用jquery所有的情况。Jquery和原始javascript的混合不是一个好的概念。
发布于 2014-09-05 13:52:32
使用.html()而不是innerHTML;
regex模式/(<br>\s*)+/考虑了与\s*匹配0或多个空白字符的空白。
$('p.body').each(function () {
var temp = $(this).html();
$(this).html(temp.replace(/(<br>\s*)+/gim, "<br>"));
});此外,如注释所示,使用浏览器控制台用于调试,并始终用于RTFM。
小提琴:http://jsfiddle.net/dm9eebz9/4/
发布于 2014-09-05 14:10:00
我真的不认为正则表达式是正确的工具。可以使用.contents和.filter的组合来删除重复的<br />标记:
var prev = null;
var $nodes = $('.body')
.contents()
.filter(function () {
return this.nodeType !== 3 || $.trim(this.data) !== "";
});
for (var i = 1; i < $nodes.length; i++) {
if ($nodes.eq(i).is('br') && $nodes.eq(i-1).is('br')) {
$nodes.eq(i).remove();
}
}这里的复杂性是<br />标记之间的文本节点,因此是两个步骤。
示例: http://jsfiddle.net/dm9eebz9/9/
https://stackoverflow.com/questions/25687191
复制相似问题