我遇到的问题是IE8没有使用Backbone.js(0.9.1)设置某些HTML5元素;只有在为视图使用HTML5 tagName,然后附加视图的元素时,才会出现此问题。
我正在使用modernizr并拥有适当的显示:block css,我可以使用jQuery的html(),append()等添加其他HTML5元素,所以这让我觉得这是一个Backbone特定问题。
此时我正在讨论解决这个问题,从不使用HTML5 tagNames,或者不再使用Backbone,这两者都不理想。有什么建议吗?
以下是此问题的最简单示例:
$(function(){
var test = Backbone.View.extend({ tagName: 'section' });
var section = new(test);
$('body').append(section.el);
});
编辑:
出于某种原因,从Modernizr 2.5回滚到2.0修复了带有HTML5标记名的视图的问题,但现在我必须在将模板内容附加到元素时使用innerShiv。不知道为什么它不喜欢2.5,但它现在有效。
进一步研究它,看看我是否可以缩小发生这种情况的原因,看看是否能找到更好的解决方案。
答案 0 :(得分:0)
根据我使用非现代浏览器中不标准的标记名称的经验(我正在看你,IE),你必须使用声明自己的命名空间并使用你的“自定义”标记和命名空间。
Windows Internet Explorer支持HTML页面上的自定义标记 要求为标记定义名称空间。否则, 解析文档时,自定义标记被视为未知标记。
您可以在MSDN
中找到源文章当然,在编写html时,声明自己的命名空间已经非常重要了。事实上,在我遇到同样的问题之前,这是闻所未闻的。毋庸置疑,其含义是您的标签看起来像<namespace:section>
。
如果您要支持IE8,您的解决方案是远离新的和花哨的HTML5 html标签,或者您应该自定义您的代码以使用IE8的不同标签。
我记得读过的另一种解决方案是使用与您打算使用的新标签同名的类。例如,将<div class="section">
与对待<section>
的处理方式相同。