我最近在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中?!?!?
任何人都可以对此有所了解,还是仅仅是另一种奇怪的浏览器?
答案 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"> </a>
格式(留下空文本也没有用,所以我把
放在那里)。所以我做的是添加一些额外的JS行来修复它,因为我不想仅为这个浏览器更改我的所有HTML(ps。我正在为我的JS使用jQuery)。
if ($.browser.msie) {
$('a.icon').html(' ');
}
答案 2 :(得分:1)
IE尤其不支持XHTML。也就是说,它永远不会将适当的XML解析规则应用于文档 - 即使使用适当的DOCTYPE,它也会将其视为HTML。但是,XHTML并不总是有效的SGML。在某些情况下(例如<br/>
)IE可以解决它,因为它准备解析tagsoup,而不仅仅是有效的SGML。但是,在其他情况下,相同的“tagsoup”行为意味着它不会将/>
视为自动关闭标记终止符。
一般来说,我的建议是使用HTML 4.01 Strict。这样你就可以确切地知道会发生什么。在将XHTML视为HTML时,将XHTML提供给浏览器是没有意义的......
答案 3 :(得分:0)
答案 4 :(得分:0)
XHTML只是XHTML,如果它作为application / xhtml + xml提供 - 否则,至少就浏览器而言,它是HTML并被视为标签汤。
因此,<span />
表示“跨度开始标记”而不是“完整跨度元素”。 (从技术上讲,它应该意味着“跨度开始标记和大于标记”,但这是另一个故事)。
XHTML规范告诉您需要做什么才能使您的XHTML以HTML格式解析。
其中一条规则是“For non-empty elements, end tags are required”。 list of elements包含一个空的快速参考,哪些不是。