我正在尝试找到一种使用JavaScript添加/更新属性的方法。我知道我可以使用setAttribute()
函数来实现它,但这在IE中不起作用。
答案 0 :(得分:155)
您可以阅读here关于许多不同浏览器中属性的行为,包括IE。
即使在IE中, element.setAttribute()
应该可以解决这个问题。你试过吗?如果它不起作用,那么也许吧
element.attributeName = 'value'
可能有用。
答案 1 :(得分:33)
如果你想要完全兼容,看起来很容易实际上很棘手。
var e = document.createElement('div');
假设您要添加“div1”的ID。
e['id'] = 'div1';
e.id = 'div1';
e.attributes['id'] = 'div1';
e.createAttribute('id','div1')
这些都可以工作,除了IE 5.5中的最后一个(这是古代历史,但仍然是XP默认没有更新)。
但当然还有突发事件。
在8之前的IE中不起作用:e.attributes['style']
不会出错而是实际上不会设置类,它必须是className:e['class']
但是,如果您正在使用属性,那么这将起作用:e.attributes['class']
总之,将属性视为文字和面向对象。
在文字中,你只是希望它吐出x ='y'而不考虑它。这是属性,setAttribute,createAttribute的用途(IE的样式异常除外)。但是因为这些都是对象,所以事情可能会变得混乱。
由于你将无法正确创建一个DOM元素而不是jQuery innerHTML slop,我会把它视为一个并坚持使用e.className ='fooClass'和e.id ='fooID'。这是一个设计偏好,但在这种情况下,尝试对待的是除了对象之外的其他任何东西。
它永远不会像其他方法那样适得其反,只要知道class是className而style是一个对象,所以它的style.width not style =“width:50px”。还要记住tagName,但这已经由createElement设置,所以你不必担心它。
这比我想要的要长,但JS中的CSS操作很棘手。
答案 2 :(得分:29)
强制性jQuery solution。查找并将title
属性设置为foo
。请注意,这选择了一个元素,因为我是通过id来做的,但您可以通过更改选择器轻松地在集合上设置相同的属性。
$('#element').attr( 'title', 'foo' );
答案 3 :(得分:7)
你想对这个属性做什么?它是一个html属性还是你自己的东西?
大多数情况下,您只需将其作为属性进行处理:想要在元素上设置标题? element.title = "foo"
会做到这一点。
对于您自己的自定义JS属性,DOM本身是可扩展的(又名expando = true),其简单的结果是您可以element.myCustomFlag = foo
并随后无问题地阅读它。