在Internet Explorer中<span>标记后的空格烦恼</span>

时间:2010-08-12 13:45:54

标签: html internet-explorer

<div onclick="alert(this.innerHTML);">

<p>Since you saw <span title=":P" class="emoticon tongue"></span> if <strong>you read</strong> the intro post <span title=":D" class="emoticon laugh"></span><span title=":D" class="emoticon laugh"></span> a</p>

</div>

我有这个标记,它很好并且在所有其他浏览器中表现得像预期一样(但是在IE中,当我提醒它时,它显示标记在“if”和最后一个“a”之前的空格,我使用这个带有jquery的html进行一些操作,并且它变得令人头疼,被操纵的字符串总是没有这些空格,即使我在IE中查看源存在空间(它为什么它正确显示),但永远不会让我警告或操作后的实际html

谢谢

编辑:基本上我在这个用例中遇到了一个问题,你看到的是一个帖子的HTML,可以编辑情感语言等等是跨度,使情绪出现在我的网站上使用CSS中的背景属性,当你点击编辑时,帖子下面有一个编辑按钮。它将这个文本放在一个contenteditable =“true”div中,并用“:P”和“:D”文本等价替换范围..但在IE中我返回这个“:PIF”和其他浏览器..正如预期和意图..这个“:P如果”。 &LT;&LT;注意空间。

3 个答案:

答案 0 :(得分:2)

在这两种情况下,您都有一个空格,一个没有内部文本的跨度(或两个),以及另一个空格。这两个空格应合并为一个空格,因为空格在第一个空格之后在HTML中不重要。如果你想要一个空格总是一个空格,请使用&nbsp;(或者使用现代方法并使用CSS来调整跨度的大小。

答案 1 :(得分:1)

您是否尝试过使用&nbsp;而不是像这样的空格:

<div onclick="alert(this.innerHTML);">

<p>Since you saw <span title=":P" class="emoticon tongue"></span>&nbsp;if <strong>you read</strong> the intro post <span title=":D" class="emoticon laugh"></span><span title=":D" class="emoticon laugh"></span>&nbsp;a</p>

</div>

答案 2 :(得分:0)

你得到这个的原因是因为你混淆.innerHTML意味着div的原始源代码 - .innerHTML包含 HTML ,而不是源代码文本。它们可以是两种不同的东西。在这种情况下,额外空间对HTML解析器没有意义 - 解析器可以自由地丢弃无意义的额外空间。

再看另一个例子看大写 - 你可能没有注意到它,但是你的警告对话框可能会显示IE中大写的标签名称。

在你开始关注“IE必须吮吸”的指责之前,我建议你在FireFox中尝试以下内容:

<div onclick="alert(this.innerHTML);">

<p>Since you saw <span title=":P" class="emoticon tongue"></span> if <strong>you read</strong> the intro post <span title=":D" class="emoticon laugh"></span><span title=":D" class="emoticon laugh"></span><u<i> a</p>

</div>

我在a:<u<i>

附近添加了损坏的标记

在IE,Safari,Opera和Chrome中,浏览器正确地将其解释为错误的标记名称(它既不是下划线也不是斜体标记)。然而,Mozilla引擎有一个长期运行的错误,它不仅看到一个下划线标记(它不应该,因为&lt;在技术上是名称的一部分,并且没有名为“u&lt;”的有效标记),是解释那里的斜体标签。在Mozilla / FireFox中运行代码,您的警告对话框将包含此字符串:<u ><i> a</i></u>。你当然不写那个,是吗?然而,这是正确的行为; innerHTML返回浏览器派生的 HTML ,而不是源代码。由于Mozilla派生了这些标签,因此当您要求它们时,它们会正确返回。

编辑:为了澄清我的术语,我使用“HTML”来引用HTML DOM树(当然,创建DOM树不需要HTML解析器,但它会在某些时候转换文本转换为一个不太模糊,解析的表单,我将其称为 HTML ),并将“源代码”引用到解析为创建它的HTML源代码文本。