在Javascript对象中,我有一个HTML字符串(node.innerHTML
),我需要从字符串中删除空段落,然后返回字符串。空段落包括<p></p>
,<p> </p>
和<p> </p>
。理想情况下,我认为字符串应该被解析为HTML代码进行处理而不是使用正则表达式。我尝试了各种方法,似乎无法使其正常工作。
这是我尝试过的代码,但它只返回一个只包含prevObject数据的对象,而且似乎没有删除空段落。
function strip_empty_p (node) {
var html = $(node.innerHTML);
html = html.filter($('p'),function () {
return this.innerHTML == "" ||
this.innerHTML == " " ||
this.innerHTML == " "
}).remove();
node.innerHTML = html.innerHTML;
return node.innerHTML;
}
答案 0 :(得分:1)
如果您有权访问node
,那么以HTML格式运行它,而不是获取innerHTML
并以此方式解析它会好得多。
const parent = document.querySelector('div');
parent.childNodes.forEach(child => child.nodeType === document.ELEMENT_NODE
&& !child.innerText.trim()
&& parent.removeChild(child));
&#13;
<div>
<p></p>
<p> </p>
<p>Not empty</p>
<p> </p>
<p>Also not empty</p>
<p></p>
</div>
&#13;
这种方法比尝试解析它更加可靠和快速,就好像它是文本一样。
如果您从某个地方将其加载为文本,请先将其转换为HTML节点,如果它的格式良好。
如果HTML格式不正确,那么生活就会变得更加困难,而且你必须做一些棘手的,容易出错的字符串解析。
答案 1 :(得分:0)
你可以通过jQuery来做到这一点。您可以查看段落的.text()
或innerHTML()
。这是关于jsfiddle的一个例子:https://jsfiddle.net/akvap5mg/
$(document).ready(function(){
$("p").each(function(){
var $this = $(this);
if($this.text().trim() === '') {
$this.remove();
}
});
});
答案 2 :(得分:0)
如果你想删除空段落,那么你需要谨慎行事,如果这是你打算做的事情,因为每次删除一个元素都会改变整个球赛。这最终对我有用:
ICDeviceBrowser
如果你没有调整变量max和i,那么检测到DOM元素会被抛弃,并且可能无法删除空段落。
或者,以下代码比喻删除空段落,无需调整变量max和i:
var d = document.getElementsByTagName("div")[0];
for (i=0, max=4; i <= max; i++) {
if ( d.children[i].textContent.trim() == ""){
d.removeChild(d.children[i]);
max--;
i--;
}
}
顺便提一下,这是一个更生动的例子here