JavaScript为html字符串中的所有元素从innerHtml中删除空白
我有一个字符串,如下所示:JavaScript为html字符串中的所有元素从innerHtml中删除空白,javascript,Javascript,我有一个字符串,如下所示: <div> Here is some text </div> <div>Here is some text </div> <ul> <li>test 1 </li> <li> test 2</li> <li> test 3 </li> </ul> &
<div> Here is some text </div>
<div>Here is some text </div>
<ul>
<li>test 1 </li>
<li> test 2</li>
<li> test 3 </li>
</ul>
<div> Here is some text </div>
<div>Here is some text</div>
<div>Here is some text</div>
<ul>
<li>test 1</li>
<li>test 2</li>
<li>test 3</li>
</ul>
<div>Here is some text</div>
为了提供更多背景,这是一个正在粘贴到所见即所得编辑器中的字符串。因此,我只是试图在粘贴字符串时清理它。我不擅长JavaScript,但即使我使用JavaScript中建议的方法:如何循环遍历页面上的所有DOM元素?发布后,我不确定如何使用document.getElementsByTagName(“*”)代码>在字符串中
更新
通过@Bharata的回答,我能够通过以下方式实现清理:
var str = "<div> Here is some text </div>" +
"<div>Here is some text </div>" +
"<ul>" +
" <li>test 1 </li>" +
" <li> test 2</li>" +
" <li> test 3 </li>" +
"</ul>" +
"<div> Here is some text </div>";
var cleanHtml = cleanUp(str);
function cleanUp(content) {
var dom = document.createElement("div");
dom.innerHTML = content;
var elems = dom.getElementsByTagName('*');
for (var i = 0; i < elems.length; i++) {
if (elems[i].innerHTML) {
elems[i].innerHTML = elems[i].innerHTML.trim();
}
}
return dom.innerHTML;
}
var str=“这里有一些文本”+
“这里有一些文字”+
“”+
“- 测试1
”+
“- 测试2
”+
“- 测试3
”+
“
”+
“这里有一些文字”;
var cleanHtml=cleanUp(str);
函数清理(内容){
var dom=document.createElement(“div”);
dom.innerHTML=内容;
var elems=dom.getElementsByTagName('*');
对于(变量i=0;i
您必须获取所有文本节点和修剪内容:
var walker = document.createTreeWalker(
document.querySelector('#my-div'),
NodeFilter.SHOW_TEXT,
null,
false
);
var node;
while(node = walker.nextNode()) {
if(!node.previousSibling)
node.textContent = node.textContent.replace(/^( |\s)*/, '')
if(!node.nextSibling)
node.textContent = node.textContent.replace(/( |\s)*$/, '')
}
在这种情况下,您可以使用JS DOM API,如下所示:
- 将文本添加到隐藏的
div
元素
- 使用
trim()
和Replace()
函数替换innerHTML
内容中的所有空格
完整示例
var str=“这里有一些文本”+
“这里有一些文字”+
“”+
“- 测试1
”+
“- 测试2
”+
“- 测试3
”+
“
”+
“这里有一些文字”;
var hiddenDiv=document.querySelector(“#hiddenDiv”);
hiddenDiv.innerHTML=str;
var hiddenElems=hiddenDiv.getElementsByTagName('*');
对于(变量i=0;i
可能重复的。。。完成此操作后,只需在每个元素的内部HTML上运行trim()
。我不是在一个页面中循环所有元素,而是在一个字符串中循环。nodejs,您在什么环境中运行?如果是这样的话,这会影响您如何进行这项工作,因为您需要(或者应该)使用像jsDOM这样的DOM库将字符串解析为元素,以便更轻松地修剪内容。这是在浏览器或其他环境中完成的吗?很抱歉让人困惑-请参阅我的编辑。