使用JavaScript代码之间取出所有空白(Remove every white space be

2019-06-27 03:32发布

我试图标记之间删除空白,这样的childNodes只包含这些标签的节点不是空白节点了。 这里是我的代码:

<li>            
    <label for="firstName"  class="mainLabel">First Name : </label>                                 
    <input type="text" name="firstName" id="firstName"/>                                    
    <span>This must be filled</span>
</li>   

而这里的JS代码:

var parentHTML = firstName.parentNode.innerHTML;
parentHTML = parentHTML.replace(/>\n</g,"><");
firstName.parentNode.innerHTML = parentHTML;

但是,当我提醒parentHTML我得到同样的旧字符串。

Answer 1:

它的(不,了解规则后),因为字符串是不可改变的,我想和你设置父元素的innerHTML是你从它以前检索完全相同的字符串。

相反,我建议:

var firstname = document.getElementsByTagName('input')[0],
    parentHTML = firstname.parentNode.innerHTML,
    newHTML = parentHTML.replace(/\>\s+\</g,'');
firstname.parentNode.innerHTML = newHTML;

console.log(parentHTML, newHTML, (parentHTML == newHTML));

JS提琴演示 。


至于从jfriend00(下图)的评论,它似乎正则表达式是问题, \n不匹配提供的模式,既然如此,作如下修订满足TEH要求:

var firstname = document.getElementsByTagName('input')[0],
    parentHTML = firstName.parentNode.innerHTML;
parentHTML = parentHTML.replace(/>\s+</g, "><");
firstName.parentNode.innerHTML = parentHTML;

console.log(firstname, parentHTML);​

JS提琴演示 。

参考文献:

  • JavaScript的正则表达式 。


Answer 2:

在大多数情况下,我建议从消除空间:

  • 文件开始
  • 文档末尾
  • >字符
  • <字符

有两种情况,我能想到的,你想要什么这不会做,这些都是相同的两个案件影响上面的不太积极的解决方案。

  • 之间空的空间inline-block元件实际上是布局的预期或期望的部分。 如果该空间已折叠到零个字符,元件之间的隐式空间被去除。 这可以通过更改下面我正则表达式用更换来避免" "

  • 我原来的答案已经更新保留空白在<script> <style> <pre><textarea>标签。 所有这些不同之处<pre>是CDATA这意味着内容不是HTML和被解析直到结束标记被找到,这意味着正则表达式是一个完整的解决方案。 如果<pre>嵌套或white-space使用CSS属性,这会不会保留您的内容。

解决方案:

    collapsed = expanded.replace(/(<(pre|script|style|textarea)[^]+?<\/\2)|(^|>)\s+|\s+(?=<|$)/g, "$1$3");


Answer 3:

只有空间:

parentHTML = parentHTML.replace( new RegExp( "\>[ ]+\<" , "g" ) , "><" ); 

新行,制表符和空格:

parentHTML = parentHTML.replace( new RegExp( "\>[\s]+\<" , "g" ) , "><" ); 

https://regex101.com/r/sD7cT8/1



Answer 4:

你可以把一个html标签在JS字符串? 我想这是可以做到。 试试这个!

s.replace(/\s+/g, ' ');


Answer 5:

我碰到这个线程来了,因为我正在寻找一个解决方案,以消除各地引起了HTML源的空白div的间隙,或者换行我的情况。

我才意识到那白色的空间可能会导致这些差距,我会疲于摆脱他们。 我想保持我的HTML源代码格式化的可读性,所以压缩代码是不是一个很好的解决方案给我。 即使我这种方式处理它,它不能解决由谷歌和其他厂商产生的div。

我开始通过创建下面的函数,把它身体的onload。

function Compress_Html() {
    //Remove whitespace between html tags to prevent gaps between divs.
    document.body.innerHTML = document.body.innerHTML.replace( /(^|>)\s+|\s+(?=<|$)/g, "$1" );
}

这似乎很好地工作,但不幸的是,它打破了我的页脚中的谷歌搜索框我有。

尝试没有成功的正则表达式的许多变化后,我发现在这个表达式测试仪http://www.regexpal.com/ 。 我就我所知道的,下面的模式做什么,我需要的。

( /(^|>)[ \n\t]+/g, ">" )

这就是说,该功能仍然打破了搜索框。 所以我结束了其移动到一个jQuery的文件准备好功能。 现在,它的工作,不打破搜索框。

<script src="https://code.jquery.com/jquery-1.9.1.min.js"></script>
<script>
    $( document ).ready(function() {
        document.body.innerHTML = document.body.innerHTML.replace( /(^|>)[ \n\t]+/g, ">" );
    });
</script>


文章来源: Remove every white space between tags using JavaScript