javascript - 单个元素中的多个文本节点?

标签 javascript jquery html meteor normalize

谁能帮我看看下面的截图并解释一下:

Image showing weird behavior

  1. 发生了什么事?
  2. 如何以编程方式检测它?
  3. 如何以编程方式修复/摆脱它?

我相信发生的事情是我在单个 pre 元素中有多个文本节点......我觉得我多年前在 MDN 上读到这样的事情是可能的,但我从来没有以前遇到过类似的事情。

jQuery 不会通过 text()html() 显示任何异常(我在控制台中都尝试过,如屏幕截图所示)...它只是显示合并到单个节点中的所有文本节点的内容。

未显示的是,当我尝试通过以下方式在控制台中手动修复此问题时:

$('pre').text($('pre').text())

不是将所有文本节点替换为单个文本节点并将所有 3 个内容合并为一个,它仅将第一个文本节点的内容替换为所有 3 个内容

所有这些让我很困惑,我找不到任何关于这些的文档,所以如果有人能回答我上面的问题,我将不胜感激。

哦,因为我知道有人会问我是怎么做到的,答案是我不太确定我做了什么。和我的meteor项目的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。以某种方式执行此操作,有时会产生您在上图中看到的结果(有时会产生其他奇怪的行为。)

最佳答案

  1. What is going on?

pre 元素中有多个文本节点。

  1. How can I programmatically detect it?

$('pre').contents() 将返回元素的子元素列表,包括文本节点。在我的例子中,我只会有文本节点,所以只需检查列表的长度是否大于 1 就可以了。如果我不能做出那个假设,我将不得不遍历返回的列表并查看是否有任何两个连续的节点是文本节点。 See the documentation from jQuery.

  1. How can I programmatically fix / get rid of it?

$('pre')[0].normalize() 修复了它。 See the documentation on normalize from MDN.

关于javascript - 单个元素中的多个文本节点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29245503/

相关文章:

javascript - 使用 Vanilla Js 检测页面向下滚动时的部分 ID

javascript - JS平均计算

javascript - 将对象(几乎)拖到窗口外时,如何使窗口自动向该方向滚动?

javascript - 限制数字输入字段集合中的字符数

javascript - 当文档大小达到指定长度时如何建立下一页链接?

javascript - 一旦另一个带有 fadeIn() 的 div 出现,div 就会被推下

javascript - 有没有办法从 Internet Explorer 中的错误对象获取行号或堆栈跟踪?

javascript - 使用 Javascript 更改循环中的数据内容

jquery - 为什么这个 jQuery AJAX PUT 在 Chrome 中有效,但在 FF 中无效

html - 隐藏类型为 ='hidden' 的输入字段与使用显示为 :none 的类