首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用JavaScript删除标记之间的所有空格

使用JavaScript删除标记之间的所有空格
EN

Stack Overflow用户
提问于 2012-08-18 07:37:59
回答 5查看 34.6K关注 0票数 13

我正在尝试删除标签之间的空白,以便childNodes只包含这些标签节点,而不是空白节点。下面是我的代码:

代码语言:javascript
运行
复制
<li>            
    <label for="firstName"  class="mainLabel">First Name : </label>                                 
    <input type="text" name="firstName" id="firstName"/>                                    
    <span>This must be filled</span>
</li>   

下面是JS代码:

代码语言:javascript
运行
复制
var parentHTML = firstName.parentNode.innerHTML;
parentHTML = parentHTML.replace(/>\n</g,"><");
firstName.parentNode.innerHTML = parentHTML;

但是当我警告parentHTML时,我得到了相同的旧字符串。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2012-08-18 07:41:26

这是因为字符串是不可变的,我认为,并且您将父元素的innerHTML设置为与之前从其中检索到的字符串完全相同。

相反,我建议:

代码语言:javascript
运行
复制
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 Fiddle demo

关于来自jfriend00的评论(如下),似乎正则表达式是问题所在,\n与提供的模式不匹配,在这种情况下,以下修改满足要求:

代码语言:javascript
运行
复制
var firstname = document.getElementsByTagName('input')[0],
    parentHTML = firstName.parentNode.innerHTML;
parentHTML = parentHTML.replace(/>\s+</g, "><");
firstName.parentNode.innerHTML = parentHTML;

console.log(firstname, parentHTML);​

JS Fiddle demo

参考文献:

票数 26
EN

Stack Overflow用户

发布于 2016-10-14 00:45:19

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

  • #en0# of document
  • End of document
  • After > < character

我能想到的有两种情况,这不会达到你想要的效果,这两种情况也会影响上面不那么激进的解决方案。

  • inline-block元素之间的空白实际上是布局中预期的或预期的部分。如果此空格折叠为零个字符,则删除元素之间的隐式空格。通过将下面的正则表达式更改为" ".
  • My原始答案已更新以保留<script><style><pre><textarea>标记中的空格,可以避免此问题。除了<pre>之外,所有这些都是CDATA,这意味着内容不是HTML,直到找到结束标记才会被解析,这意味着正则表达式是一个完整的解决方案。如果<pre>是嵌套的或使用了white-space CSS属性,则不会保留您的内容。

解决方案:

代码语言:javascript
运行
复制
    collapsed = expanded.replace(/(<(pre|script|style|textarea)[^]+?<\/\2)|(^|>)\s+|\s+(?=<|$)/g, "$1$3");
票数 21
EN

Stack Overflow用户

发布于 2013-04-09 17:35:30

仅空格:

代码语言:javascript
运行
复制
parentHTML = parentHTML.replace( new RegExp( "\>[ ]+\<" , "g" ) , "><" ); 

换行、制表符和空格:

代码语言:javascript
运行
复制
parentHTML = parentHTML.replace( new RegExp( "\>[\s]+\<" , "g" ) , "><" ); 

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

票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/12014441

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档