IE8& FF XHTML错误或跨度错误?

时间:2009-07-23 03:42:08

标签: firefox internet-explorer-8 xhtml

我最近在IE8& FF。

使用js为布局动态创建一些span标签的设计师(他们在某些标签上放置圆角图形)。现在,js中的xhtml看起来像这样:< span class =“leftcorner”/>< span class =“rightcorner”/>并且工作得很好!

众所周知,js中的动态渲染元素可能是处理器密集型的,因此我将元素从js移动到页面源中,完全如上所述。

......它没有用......不仅没有用,它崩溃IE8。修复很简单,把近距离放在ie:< span class =“leftcorner”>&lt ; /跨度>

我对此感到有点困惑。 首先据我所知< span class =“leftcorner”/>是完全有效的XHTML! 其次它是动态的,但不是在XHTML中?!?!?

任何人都可以对此有所了解,还是仅仅是另一种奇怪的浏览器?

5 个答案:

答案 0 :(得分:2)

主流浏览器仅支持一小部分自动关闭标签。 (有关完整列表,请参阅this answer。)

根据您在JS中创建元素的方式,JavaScript引擎可能创建了一个放置在DOM中的有效元素。

答案 1 :(得分:1)

我在IE中遇到与a标签类似的问题。

问题是我的链接看起来像那个(这是一个用css设置的图标,所以我不需要其中的文字:

<a href="link" class="icon edit" />

不幸的是,在IE中,根本没有显示这些链接。他们必须在

<a href="link class="icon edit">&nbsp;</a>

格式(留下空文本也没有用,所以我把&nbsp;放在那里)。所以我做的是添加一些额外的JS行来修复它,因为我不想仅为这个浏览器更改我的所有HTML(ps。我正在为我的JS使用jQuery)。

if ($.browser.msie) {
    $('a.icon').html('&nbsp');
}

答案 2 :(得分:1)

IE尤其不支持XHTML。也就是说,它永远不会将适当的XML解析规则应用于文档 - 即使使用适当的DOCTYPE,它也会将其视为HTML。但是,XHTML并不总是有效的SGML。在某些情况下(例如<br/>)IE可以解决它,因为它准备解析tagsoup,而不仅仅是有效的SGML。但是,在其他情况下,相同的“tagsoup”行为意味着它不会将/>视为自动关闭标记终止符。

一般来说,我的建议是使用HTML 4.01 Strict。这样你就可以确切地知道会发生什么。在将XHTML视为HTML时,将XHTML提供给浏览器是没有意义的......

答案 3 :(得分:0)

请参阅我认为Is writing self closing tags for elements not traditionally empty bad practice?的答案之一将回答您的问题。

答案 4 :(得分:0)

XHTML只是XHTML,如果它作为application / xhtml + xml提供 - 否则,至少就浏览器而言,它是HTML并被视为标签汤。

因此,<span />表示“跨度开始标记”而不是“完整跨度元素”。 (从技术上讲,它应该意味着“跨度开始标记和大于标记”,但这是另一个故事)。

XHTML规范告诉您需要做什么才能使您的XHTML以HTML格式解析。

其中一条规则是“For non-empty elements, end tags are required”。 list of elements包含一个空的快速参考,哪些不是。