Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/457.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript为html字符串中的所有元素从innerHtml中删除空白_Javascript - Fatal编程技术网

JavaScript为html字符串中的所有元素从innerHtml中删除空白

JavaScript为html字符串中的所有元素从innerHtml中删除空白,javascript,Javascript,我有一个字符串,如下所示: <div> Here is some text&nbsp;</div> <div>Here is some text </div> <ul> <li>test 1 </li> <li> test 2</li> <li>&nbsp;test 3&nbsp;</li> </ul> &

我有一个字符串,如下所示:

<div> Here is some text&nbsp;</div>
<div>Here is some text </div>
<ul>
    <li>test 1 </li>
    <li> test 2</li>
    <li>&nbsp;test 3&nbsp;</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&nbsp;</div>" + 
"<div>Here is some text </div>" + 
"<ul>" + 
"    <li>test 1 </li>" + 
"    <li> test 2</li>" + 
"    <li>&nbsp;test 3&nbsp;</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(/^(&nbsp;|\s)*/, '')

    if(!node.nextSibling)
       node.textContent = node.textContent.replace(/(&nbsp;|\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库将字符串解析为元素,以便更轻松地修剪内容。这是在浏览器或其他环境中完成的吗?很抱歉让人困惑-请参阅我的编辑。