代码之家  ›  专栏  ›  技术社区  ›  dev.e.loper

如何使用javascript向HTML元素添加/更新属性?

  •  114
  • dev.e.loper  · 技术社区  · 16 年前

    我正在尝试找到一种使用javascript添加/更新属性的方法。我知道我可以用 setAttribute() 但在IE中不起作用。

    4 回复  |  直到 16 年前
        1
  •  149
  •   Box Box Box Box    8 年前

    你可以阅读 here 关于属性在许多不同浏览器中的行为,包括IE。

    element.setAttribute() 即使是在IE中也应该这样做。你试过了吗?如果它不起作用,那么也许 element.attributeName = 'value' 可能奏效。

        2
  •  32
  •   JPearce    14 年前

    如果你想完全兼容,那么看起来容易的事情实际上是很棘手的。

    var e = document.createElement('div');

    假设您要添加的ID为“div1”。

    e['id'] = 'div1';
    e.id = 'div1';
    e.attributes['id'] = 'div1';
    e.createAttribute('id','div1')
    除了IE5.5中的最后一个版本(这是一个古老的历史,但仍然是XP的默认版本,没有更新)。

    当然,也有一些意外事件。 8岁之前不能在IE工作: e.attributes['style'] 不会出错,但不会实际设置类,它必须是类名: e['class'] .
    但是,如果您使用的是属性,那么这将起作用: e.attributes['class']

    总之,将属性视为文字和面向对象的属性。

    在字面上,你只是想让它吐出x='y'而不去想它。这就是attributes、setattribute和createAttribute的用途(ie的样式例外除外)。但因为这些都是真正的物体,所以事情会变得混乱。

    由于要正确地创建一个dom元素而不是jquery innerhtml slop,所以我将把它视为一个元素,并坚持使用e.classname='fooclass'和e.id='fooid'。这是一种设计偏好,但在本例中,尝试将其视为对象以外的任何对象都会对您产生不利影响。

    它不会像其他方法那样对您产生反作用,只需注意类是类名,样式是对象,所以它是style.width而不是style=“width:50px”。还记得标记名,但它已经由CreateElement设置,所以您不必担心它。

    这比我想要的要长,但是JS中的CSS操作是一项棘手的工作。

        3
  •  29
  •   tvanfosson    16 年前

    必修的 jQuery solution . 查找并设置 title 属性到 foo . 注意,这会选择一个元素,因为我是按ID来做的,但是通过更改选择器,您可以轻松地在集合上设置相同的属性。

    $('#element').attr( 'title', 'foo' );
    
        4
  •  7
  •   annakata    16 年前

    您希望如何处理该属性?它是HTML属性还是您自己的属性?

    大多数时候,您可以简单地将其作为一个属性来处理:想要在元素上设置标题吗? element.title = "foo" 会做的。

    对于您自己的自定义JS属性,DOM是自然可扩展的(aka expando=true),简单的结果是您可以这样做。 element.myCustomFlag = foo 然后毫无疑问地读了一遍。