【发布时间】:2015-05-28 12:34:33
【问题描述】:
谁能帮我看看下面的截图并解释一下:
- 这是怎么回事?
- 如何以编程方式检测它?
- 如何以编程方式修复/消除它?
我相信正在发生的事情是我在单个 pre 元素中有多个文本节点...我觉得我多年前在 MDN 上读到这样的事情是可能的,但我以前从未遇到过这样的事情现在。
jQuery 没有通过text() 或html() 显示任何不寻常的地方(我在控制台中都尝试过,如屏幕截图所示)......它只是显示了所有文本节点的内容合并为一个节点。
未显示的是,当我尝试在控制台中手动修复此问题时,执行以下操作:
$('pre').text($('pre').text())
不是将所有文本节点替换为单个文本节点,将所有 3 个文本节点的内容合并为一个,它仅将第一个文本节点的内容替换为所有 3 个文本节点的内容。
所有这些真的让我很困惑,我找不到任何关于这些的文档,所以如果有人能回答我上面的问题,我将非常感激。
哦,因为我知道有人会问我是怎么做到的,答案是我不太确定我做了什么。我认为这与我的流星项目的html和js之间的循环循环有关:
在我的 html 中我有这个:
<pre class="editable" contentEditable="true">{{text}}</pre>
在我的 javascript 中我有这个:
"input pre": function (event) {
var newText = $(event.target).text();
Ideas.update(this._id, {$set: {text: newText}});
}
因此,meteor 会自动检查我的数据库中对text 的更改,并将最新的副本放入我的pre。它还可以查看用户何时编辑pre 并在数据库中编辑text。以某种方式执行此操作,有时会产生您在上图中看到的情况(有时会产生其他奇怪的行为。)
【问题讨论】:
-
我还没有时间真正玩这个,但我在 MDN 上找到了一些看起来相关的文档...developer.mozilla.org/en-US/docs/Web/API/Node/normalize 和 developer.mozilla.org/en-US/docs/Web/API/Text
-
假设:从普通 HTML 忽略空白的角度来看,屏幕截图的上半部分可能是合乎逻辑的。
<pre>标签改变了这种行为,因此用户代理将通过注意换行符来模拟多行的效果。它添加了多个文本节点。 jQuery 将文本连接成一个字符串的做法可能是 jQuery 的事情。 -
这点知识可能对某人有所帮助:developer.mozilla.org/en-US/docs/Web/API/Text
标签: javascript jquery html meteor normalize