我需要从HTML字符串中删除空白标记。通过"标记"我的意思是任何包含实体或字符的空HTML元素,这些实体或字符将在Web浏览器中呈现为空白。例如
<p> ‌</p>Test <div> </div><br/><span> okay </span>
......应该成为
Test <span> okay </span>
重点是从DOM中删除不可见的元素,或者只添加额外的换行符。
这将解决我遇到的支持在线编辑器的问题,用户可以从Word中剪切粘贴内容。有时剪贴板会抓取不完整的元素。例如,关闭p标签。粘贴到编辑器中时,插入开口p标签会修复不完整的元素。这是我有机会应用正则表达式和DOM操作来清理这些令人惊讶的非常有问题的元素。 Jquery是我唯一可以利用的库。
答案 0 :(得分:2)
/<.+?>( |‌|\s)+<\/.+?>|<br\/>/g
为我做了诀窍:
let str = '<p> ‌</p>Test <div> </div><br/><span> okay </span>';
let regex = /<.+?>( |‌|\s)+<\/.+?>|<br\/>/g;
console.log(str.replace(regex, ""));
答案 1 :(得分:1)
只是为了给你一个想法:循环遍历DOM中的所有元素,看看他们的innerHtml
或innerText
是否是像这样的空格:
var all = document.getElementsByTagName("*");
for (var i=0, max=all.length; i < max; i++) {
if(all[i].innerHTML == "" || all[i].innerText == ""){
all[i].parentElement.removeChild(all[i]);
};
}
答案 2 :(得分:1)
这是一个递归解决方案,应该删除正文中的所有空标记。
var body = document.getElementsByTagName('body')[0];
function removeEmptyChildren(node){
let children = node.children;
for(var i = 0; i < children.length; i++){
if(children[i].children){
removeEmptyChildren(children[i]);
}
if(!children[i].textContent.trim().length){
node.removeChild(children[i]);
i--;
}
}
}
removeEmptyChildren(body);