jQuery的文本()调用保留在Firefox中但不是在IE换行符jQuery的文本()调用保留在F

2019-05-12 02:23发布

我正在做:

alert($("#div").text());

对这样的事情:

<div id="div">
&lt;div&gt;
Some text
&lt;div&gt;
</div>

为什么逃跑内容? 因为它有时是畸形的,我不希望它干扰或破坏文档的其余部分。

在FF它显示保存新行。 在IE7不会。 我需要保留的空白。 此内容实际上是要在编辑一个文本。

任何人都建议富文本编辑器之前,该代码是不是真的HTML。 这是一个自定义的方言。

那么,如何保持在IE中的换行符?

Answer 1:

看起来这是我的问题: 在Internet Explorer的innerHTML的怪癖 :

然而,innerHTML的在Internet Explorer中的问题。

HTML标准要求上的内容显示的转换。 各种与相邻的空白量折叠到一个单一的空间。 这是一件好事 - 只是作为一个例子,它可以让我增添了不少换行符到这个源文件,而无需担心显示的文本怪异换行符。

Internet Explorer的应用上分配给innerHTML属性这些变化。 这似乎是一个好主意:它显示过程中节省一点时间,因为如果内存中表示已经标准化,然后在浏览器没有正常化时,它需要显示的文本。

但也有例外的规范化规则,虽然。 值得注意的是,这些是<textarea>的元素,所述元素<pre>和,在CSS感知的浏览器,具有任意值,但正常的白色空间属性元素。

Internet Explorer不尊重这些特殊情况。 第三个使他们优化坏主意,因为空白可能会在运行时改变,例如通过DOM。 在任何情况下,Internet Explorer将所有标准化作业发innerHTML属性,从而导致下面显示效果。

本文填补在页面加载textarea的。 这也包含换行符和多个空格。 格式化被保存在这里为好,除了UA可以换行。

(强调)

事实上,如果我将其更改为:

<div id="div">
<pre>
...
</pre>
</div>

$("#div pre").text()

或者干脆:

<style type="text/css">
#div { white-space: pre }
</style>

这一切神奇地运行。



Answer 2:

不知道这会有所帮助,但也许你可以试试这个:

#div {
  white-space: pre;
}


Answer 3:

见这里的解决方法:

黑客是先复制你想要的内容元素,使用cloneNode()。

接下来创建一个<pre>用的createElement()元素,然后将克隆节点追加到它。

现在你可以创造的的innerText <pre>元素,只是删除临时对象。 你现在有空格保留文本:)

 var cloned = targetElement.cloneNode(true); var pre = document.createElement("pre"); pre.appendChild(cloned); var textContent = pre.textContent ? pre.textContent : pre.innerText; delete pre; delete cloned; 

我克隆元素的原因是因为使用appendChild()将其拉出DOM和它的痛苦在DOM中的正确位置重新插入回。

希望这有助于一些人在那里:)



文章来源: jQuery text() call preserves newlines in Firefox but not in IE