【问题标题】:How to prevent knockout from stripping empty text nodes from IE8 span siblings如何防止敲除从 IE8 跨度兄弟中剥离空文本节点
【发布时间】:2013-10-20 15:25:36
【问题描述】:

假设我有 3 个跨度包裹在一个 div 中。

<div>
    <span>1/1/2000</span>
    <span>-</span>
    <span>1/2/2000</span>
</div>

浏览器应该将 span 之间的换行符解释为空格,以便生成的显示如下所示:

1/1/2000 - 1/2/2000

...不像这些

1/1/2000-1/2/2000
1/1/2000- 1/2/2000
1/1/2000 -1/2/2000

...当跨度没有淘汰绑定时,IE8 就是这种情况。如果您使用 IE8 开发工具检查上述标记,您可以在每个 span 之后清楚地看到“Text - Empty Text Node”。

<div>
    <span>1/1/2000</span>
    Text - Empty Text Node
    <span>-</span>
    Text - Empty Text Node
    <span>1/2/2000</span>
    Text - Empty Text Node
</div>

但是,一旦我像这样在跨度上放置淘汰赛绑定,空文本节点的行为就会发生变化:

<div>
    <span data-bind="text: start"></span>
    <span data-bind="visible: end">-</span>
    Text - Empty Text Node
    <span data-bind="text: end"></span>
    Text - Empty Text Node
</div>

...前两个跨度之间的空文本节点看起来像是被剥离了。这是淘汰错误吗?任何解决方法?这是使用版本 2.3.0。

【问题讨论】:

  • 你能用小提琴重现这个吗?
  • 这可能只是一个错字,但 - 没有使用 '=' 属性。它正在使用 -????
  • @PWKad 我正打算尝试,但是 jsfiddle.net 在 IE8 中抛出了各种错误,只是试图创建一个新的小提琴。
  • @segFault,不,这只是我的问题中的一个错字,我已修复它,感谢您指出。

标签: html knockout.js internet-explorer-8 whitespace knockout-2.0


【解决方案1】:

knockout::text-binding 文档中描述的空格存在问题(请参阅注 4,可能是您的 IE 具有 Quirk 模式:开启)。
Knockout 的解决方案是向span 发送一些内容。

<div>
    <span data-bind="text: start">&nbsp;</span>
    <span data-bind="visible: end">-</span>
    <span data-bind="text: end">&nbsp;</span>
</div>  

另外,您可以使用单个 span 元素:

<div>
    <span data-bind="text: start + (end ? ' - ' : '') + end"></span>
</div>

【讨论】:

  • HTML 的第一行是&lt;!DOCTYPE html&gt;,所以我不认为 IE8 被扔进了怪癖模式。您的第二个建议是我的临时解决方法,但我不喜欢它。在跨度中放置非中断空间的第一个建议也有效,虽然我也不喜欢它,但它比第二个选项好得多。还有什么其他原因可能导致这种情况吗?
  • @danludwig 我没有更多的想法,为什么 IE 的工作方式不可预测。 IE 很疯狂