javascript - 用

标签 javascript jquery html css regex

让我们假设以下元素(查找尾随空格和前导空格):

<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;'));

但它转义了 &nbsp;结果变成a&nbsp;mess&nbsp;of&nbsp;entities .

显然,为此我们可以使用 $('p').html() :

$('p').html($('p').html().replace(/ /g, '&nbsp;'));

但是这个更糟,因为它还添加了&nbsp;在标签本身内:

<p>
    <span&nbsp;class="item">Lorem&nbsp;Ipsum&nbsp;is&nbsp;simply&nbsp;dummy&nbsp;text&nbsp;</span><span&nbsp;class="item">of&nbsp;the&nbsp;printing&nbsp;and&nbsp;typesetting</span><span&nbsp;class="item">&nbsp;industry.</span>
</p>

<!-- TL;DR -->
<span&nbsp;class="item"></span> <!-- is actually invalid... -->

它打破了一切......

注意事项:

  • 不会只有<span>item 的元素在容器内(也可能不总是 <p> )。
  • 慢速正则表达式是一个选项(问题是,我想不出一个...)。

我在这里有什么选择?

更新:

事实上,谁能解释为什么多行/单行会出现这样的错误 display: inline-block; ? (参见上面的 fiddle 链接,并检查...)

问题已迁移至 display: inline-block; weird spacing behavior

最佳答案

$('p').contents().filter(function(){
    return this.nodeType == 3 // Text node
}).each(function(){
    this.data = this.data.replace(/ /g, '\u00a0');
});

DEMO

关于javascript - 用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10474124/

相关文章:

javascript - Fancybox - 用于制作之前/之后的画廊

jquery - 将鼠标悬停在右侧的元素上会触发元素向左的 css 更改

javascript - 在 js 类的异步函数中调用函数

javascript - 如何简化隐藏/显示段落的 javascript 代码

javascript - 如何使用 HTML5 Canvas 获取多个颜色矩形?

jquery - 忽略使用 cancelable=false 取消 touchmove 事件的尝试,例如因为滚动正在进行且无法中断

javascript - 使用 Array.prototype.map 时将变量名称分配为对象属性

javascript - 我有一个 javascript 对象,我想通过 id 查找用户并更新他们的余额

html - 无法在 div 旁边对齐按钮

javascript - 悬停时更改元素时的动画