使用 JavaScript 删除标签之间的每个空格

Remove every white space between tags using JavaScript

本文关键字:空格 之间 JavaScript 删除 标签 使用      更新时间:2023-09-26

我正在尝试删除标签之间的空格,以便子节点仅包含这些标签节点,而不是空格节点。这是我的代码:

<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时,我得到相同的旧字符串。

我认为这是

(不是,请参阅规则后),因为字符串是不可变的,并且您将父元素的 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与提供的模式不匹配,在这种情况下,以下修正案满足要求:

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 正则表达式。

在大多数情况下,我建议从以下位置删除空格:

  • 文档开头
  • 文档结尾
  • >字符之后
  • <字符之前

我可以想到两种情况,这不会按照您想要的方式进行,而这两种情况会影响上述不太激进的解决方案。

  • 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");

只有空格:

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

换行符、制表符和空格:

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

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

你能在 js 中将 html 标签视为字符串吗?我想这是可以做到的。试试这个!

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

我遇到了这个线程,因为我正在寻找一种解决方案来消除由 HTML 源代码中的空格或换行符引起的div 周围的间隙。

在我意识到空白会导致这些间隙之前,我快要疯了,试图摆脱它们。我想保持我的 HTML 源代码格式以提高可读性,因此压缩代码对我来说不是一个好的解决方案。即使我以这种方式处理它,它也不会修复由 Google 和其他供应商生成的div。

我首先创建了以下函数并在 body 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>