我在SharePoint 2013中使用textarea富文本编辑器文本编辑器,它有一个令人讨厌的习惯,在这样的标签末尾将额外的break标签添加到幕后html标记中:
<h1>Some heading<br></h1>
<p>Intro paragraph with maybe an actual.<br>That is supposed to be here.</p>
<ul>
<li>Item 1</li>
<li>Item 2</li>
<br>
<br>
</ul>
在此示例中,段落中间的br是用户插入的br,但是不希望在h1和ul标签末尾使用br,我希望将其删除。我想不出一个
就在另一个结束标记之前有效的情况,所以这是我的计划。
我想在所有其他结束标记之前立即找到所有br标记,并删除它们。
我们可以使用普通的javascript,但是jQuery已经在其他方面了。
我发现this thread提供了一个正则表达式解决方案,可以在结束h2之前删除br。它是php,提供的算法多于实现。那里还有第二种解决方案,“使用DOM解析器”。但是我不熟悉。
另外,一些添加的标签是<br>
,有些是<br />
。可能有也可能没有行返回和空格。
是否有一种方法可以在紧接其他有效的结束标记之前(忽略任何行返回或空格)查找所有<br>
或<br />
?
答案 0 :(得分:3)
使用jQuery覆盖显示的情况。可以添加到您发现未涵盖的其他案例中
// get html string from main editor and put in temporary div
const $html = $('<div>').append($('#editor').html())
let ctr = 0; // counter for demo/debugging only
// hunt for unwanted culprits
$html.find('br').each(function() {
const $br = $(this);
// remove at end of parent OR more than one together OR is in a UL as child
if (!this.nextSibling || $br.next().is('br') || $br.parent().is('ul')) {
ctr++
this.remove();
}
})
console.log('removed =', ctr)
console.log($html.html())
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div id="editor">
<h1>Some heading<br></h1>
<p>Intro paragraph with maybe an actual.<br>That is supposed to be here.</p>
<ul>
<li>Item 1</li>
<li>Item 2</li>
<br>
<br>
</ul>
</div>
答案 1 :(得分:0)
如果字符串中包含HTML,则简单的RegEx替换即可删除您想要的内容:
htmlSourceCodeVar = htmlSourceCodeVar.replace(/<br(?: \/)?>(<\/)/ig, '$1');
RegEx匹配的全部是<br
,然后是/
,然后是></
;然后将其替换为该结束标记的开头,从而删除中断。在这种情况下,您也可以在没有反向引用的情况下执行此操作,因为结束标记的开头是恒定且已知的:
htmlSourceCodeVar = htmlSourceCodeVar.replace(/<br(?: \/)?><\//ig, '</');