我们在从IE6到IE8的浏览器上支持旧的基于Web的应用程序,而javascript和css对IE非常具体。现在我们要支持IE9。在我们的javascript中,IE9中不支持许多语法,例如使用点(.
)而不是setAttribute
和getAttribute
访问元素实例上的HTML属性。
我只是想知道什么是支持更多浏览器版本或支持不同浏览器的最佳方式。
我在想使用jQuery访问所有浏览器的非标准功能,或者编写一个名为浏览器的类具有类似getAttribute
的方法,然后像IE7和IE9这样的不同类以特定的方式覆盖此方法。
我想在这样的场景中使用最好的前进方法和用户使用的方法。
setAttribute和GetAttribute只是简单的例子,还有更多例如访问我们使用的文件元素引用。在早期版本的firefox等中不支持document.all.elementName。所以如何将所有这些代码转换为Jquery或其他图书馆。 然后设置和获取属性有更多问题,问题的焦点是在所有浏览器中将旧的javascript转换为支持的javascript的最佳方式
由于
答案 0 :(得分:2)
绝对建议使用库来平滑浏览器差异并提供许多有用的实用功能。有很多选择:jQuery,YUI,Closure,Prototype或any of several others。 jQuery是hugely dominant at the moment因此可以更容易地找到熟悉它的人(并且它具有活跃的开发资源,赞助等),但是您选择的库取决于您。
另外强烈建议您仔细查看HTML5规范的DOM2 HTML specification和Web Application APIs部分,因为有时您希望使用属性的反射属性而不是getAttribute
/ setAttribute
。例如,element.id
是一种完全有效的跨浏览器方式来引用元素的ID;您不需要使用element.getAttribute("id")
。同样,您希望使用element.className
而不是element.getAttribute("class")
(在某些早期版本的IE上工作不正常)。确实,IE8和更早版本还将其他属性放在元素上用于任意属性(例如,如果元素上有foo
属性,则可以将其作为element.foo
访问,或者如果您有{{1}你可以使用data-foo
),而IE9和其他浏览器不会(有充分的理由!),但对于标准属性,经常有反射属性。
如果您在元素上使用任意属性,还建议根据HTML5规范将其名称更改为the data-*
format。
答案 1 :(得分:2)
IE 9绝对支持访问反映HTML属性的DOM属性,与过去15年发布的所有主流浏览器一样,所以我不确定你在哪里听说它不是 [编辑:Aaaah ,我想你在谈论自定义属性] 。这些属性在DOM规范中标准化,因此可以保证在未来的浏览器中使用。此外,使用属性通常更方便,更兼容,而不是getAttribute()
和setAttribute()
(特别是在较旧的IE中,这已破坏了这些方法的实现)。
答案 2 :(得分:1)
如果您有大量专门为IE编写的代码< 9如果您希望在其他浏览器中工作,首先需要识别所有IE特定代码,然后将其替换为跨浏览器代码。我不认为任何特定的库会对此有所帮助,事实上POJS可能更容易。
例如,您可以使用document.all
对document.getElementById
进行有监督的替换,但不能使用$(其中$来自jQuery或Prototype或其他)。
使用带有非标准属性的点属性访问会遇到问题,但如果将它们设置为属性,您会没事(尽管原则上这样做不是一个好主意)。
顺便说一下,jQuery没有“覆盖”get / setAttribute,它有自己的attr
和prop
方法。
最终,你可能最终会从头开始重写整个事情。请记住,不要使用feature detection以及良好的后备策略来定位特定浏览器版本,支持标准并在必要时解决非标准行为。