【发布时间】:2012-05-15 11:47:20
【问题描述】:
让我们假设以下元素(查找尾随和前导空格):
<p>
<span class="item">Lorem Ipsum is simply dummy text </span><span class="item">of the printing and typesetting</span><span class="item"> industry.</span>
</p>
我想用&nbsp; 替换所有空格,因为这里显示了display: inline-block 奇怪的行为:http://jsfiddle.net/SQuUZ/(我不了解所有浏览器,但最新的 Chrome 和 Firefox 的行为相同)。
现在,既然 javascript 是一个选项,jQuery 也是一个选项,我可以:
$('p').text($('p').text().replace(/ /g, ' '));
但它逃脱了&nbsp;,变成了a&nbsp;mess&nbsp;of&nbsp;entities。
显然,我们可以使用$('p').html():
$('p').html($('p').html().replace(/ /g, ' '));
但这个更糟糕,因为它还在标签本身中添加了&nbsp;:
<p>
<span class="item">Lorem Ipsum is simply dummy text </span><span class="item">of the printing and typesetting</span><span class="item"> industry.</span>
</p>
<!-- TL;DR -->
<span class="item"></span> <!-- is actually invalid... -->
它破坏了一切......
注意事项:
- 容器内不仅有
<span>类的item元素(也可能不总是<p>)。 - 慢速正则表达式是一种选择(问题是,我想不出一个……)。
我有哪些选择?
更新:
事实上,谁能解释为什么多行/单行display: inline-block; 会有这样的错误? (请参阅上面的小提琴链接,并检查...)
【问题讨论】:
-
不要在这样的 html 块上使用正则表达式,因为你正在发现。您将获得整个子树,包括标签。相反,您应该只在子树中查找文本节点并单独操作这些节点。
-
我知道用于 HTML 操作的正则表达式。至于 NODE_TEXT 操作,我找不到插入
html内容的方法。除了没有破坏标签之外,所有结果都与.text()相同。 -
感谢您的提问,很有趣!
-
@Qtax,一旦我的应用程序准备好公开测试版,你就可以阅读它的描述,当它准备好时我会通知你。
-
不清楚真正的问题是什么,因为您指的是 jsfiddle,而不是问题描述。为什么要用实体替换空格而不是用实际的不间断空格替换它们?
标签: javascript jquery html css regex