有什么方法可以避免在旧IE中将属性设置为属性?

时间:2014-03-28 20:00:59

标签: javascript internet-explorer dom

我正在开发一个JavaScript library,我需要在DOM元素上设置各种属性。

例如,DOM元素可能具有名为' states'的属性(普通对象)。设置就可以了:

_('input').get('states')

/*        OUTPUT

    {
        hidden: true,
        anotherState: false,
        andAnotherOne: true,
    }

*/

在IE< 9中,输出将看起来像这样(我理解的只是原生的遗留IE行为):

<input type="text" value="some value" states="[object Object]">

有时也会使用相同的方法在DOM元素上设置其他属性,并且可能会出现在DOM元素上设置了冲突的属性和属性的问题(在这种情况下,IE&lt; 9可能会占用)

任何避免这种情况的方法,或者这只是你必须忍受的事情?

编辑以澄清

举一个vanilla JavaScript的例子,假设你这样做:

document.getElementById('foo').bar = 'foobar';

在任何小于9的IE版本中,DOM中的输出将如下所示:

<div id="foo" bar="foobar"></div>

在绝大多数其他浏览器中,这不会发生。

现在,如果你这样做:

document.getElementById('foo').bar = {
    a: 'b',
    c: 'd'
}

在任何小于9的IE版本中,您都会得到:

<div id="foo" bar="[object Object]"></div>

再一次,这在大多数其他浏览器中都不会发生。

1 个答案:

答案 0 :(得分:0)

只是想一想你的技术。您实际上是通过为数据附加属性来尝试修改本机对象。这不是一个好主意。它实际上是原型库对元素所做的,并且导致许多不良问题,以及它最终消失的原因。

更好的方法是创建一个包装元素的对象,这是jQuery所做的。现在说你正在尝试将数据绑定到元素,可能是为了持久化。你可能想重新考虑一下。例如,可能使用数据属性或仅将数据保存在localStorage中。我想你会发现你有更好的维护解决方案,但也会更高效。

将此视为尝试并做了我认为你想做的事情的人。