【问题标题】:What is the correct way to access an element's CSS style properties from JavaScript?从 JavaScript 访问元素的 CSS 样式属性的正确方法是什么?
【发布时间】:2012-06-14 05:49:43
【问题描述】:

以下 JavaScript 代码在基于 WebKit 的浏览器中完美运行,但在 Firefox 中无法运行:

canvas.style['left'] = "50%";
canvas.style['margin-left'] = "-" + (width / 2) + "px";

在Firefox中检查元素,我可以看到上面的代码成功设置了left属性,但是由于某种原因该元素没有margin-left属性。

看来我一定是做错了什么,这并不奇怪,因为我无法弄清楚从 JavaScript 访问(读取或设置)CSS 样式属性的正确方法是什么。我刚刚找到了一些使用这种表示法的示例,并尝试遵循它们,但结果好坏参半。

从 JavaScript 访问元素的 CSS 样式属性的正确/符合标准的方法是什么?

【问题讨论】:

标签: javascript css firefox dom webkit


【解决方案1】:

删除破折号和下一个带有大写字母的单词, margin-left 到 marginLeft 等

  obj.style.marginLeft = '10px';

【讨论】:

    【解决方案2】:

    经过一番摸索后,我发现了以下基本事实,这些事实对于大多数 JavaScript 人员来说肯定是不费吹灰之力的,但我想我的困惑在 JavaScript 新手中并不少见。

    • JavaScript 中的所有对象都是关联数组。

    可以通过以下两种方式之一访问对象属性:

    var o = new Object();
    o.prop = "A string";
    o['prop']; // => "A string"
    

    虽然可以将对象用作“普通”关联数组并使用带有任意字符串的键:

    o.['another-prop'] = 4 // Perfectly valid
    

    这样做,您将创建一个无法通过点符号访问的属性:

    o.another-prop // Parsed as `o.another` minus `prop`
    

    这大概是以下原因:

    • 从 JavaScript 访问时,DOM 样式属性使用 camelCase。

    我使用的是 CSS 中使用的连字符属性名称。这些在我测试的所有基于 WebKit 的浏览器中都有效,但这似乎只是因为 WebKit 是宽容的。


    据我所知,从 JavaScript 访问 CSS 样式属性的正确方法是将属性名称转换为驼峰式大小写,然后使用点表示法或括号关联数组表示法。在 Firefox 中不起作用的行变成了

    canvas.style['marginLeft'] = "-" + (width / 2) + "px";
    

    canvas.style.marginLeft = "-" + (width / 2) + "px";
    

    这适用于我测试过的所有浏览器,但如果我所说的内容不正确或不符合标准,我很乐意听到。

    【讨论】:

    • 拉了很多头发?你一问问题就回答了
    • “JavaScript 中的所有对象都是关联数组。” 反之亦然,您可以将对象用作关联数组。对象是一种数据类型,而关联数组更像是一种数据结构(至少在JavaScript中是这样)。
    • @Esailija:费了好大劲,他把问题和答案写在了一起。
    • 一个小补充。如果 DOM 属性名称是 JavaScript 中的保留字,则它以单词“html”为前缀,整个名称采用驼峰式大小写。因此,<label>for 属性在 JavaScript 中变成了labelElement.htmlFor
    猜你喜欢
    • 1970-01-01
    • 2023-01-20
    • 1970-01-01
    • 1970-01-01
    • 2013-08-18
    • 1970-01-01
    • 1970-01-01
    • 2012-11-11
    • 1970-01-01
    相关资源
    最近更新 更多