【问题标题】:Browser inconsistency when using JavaScript to generate JavaScript to generate inline style使用 JavaScript 生成 JavaScript 生成内联样式时浏览器不一致
【发布时间】:2015-06-24 22:28:28
【问题描述】:

我正在开发一个应用程序,为用户分配不同颜色的文本(想想像 Gravatar 一样的哈希生成的用户颜色)[即HashColors - 可能需要点击“用 JS 运行”]。

为了将 HashColors 脚本集成到更大的应用程序中,我创建了一个函数,为每个用户的条目设置 .textContent.style.textContent 似乎可以跨浏览器使用,但.style 似乎只能在 Firefox 中使用。

https://jsbin.com/sudave/9/edit?html,console,output 上提供了完整示例(可能需要单击“使用 JS 运行”),但我很确定我的问题的症结在于以下函数或我如何称呼它:

元素生成函数:

var gE = function(selector, value, style) {
    var element = document.querySelector("ul " + selector);
    element.textContent = value || " ";  // <-- works as expected
    element.style = style || "";  // <-- does NOT work as expected !!!
                                  // i.e. works as expected in FF
                                  // does NOT work as expected in Chrome or Safari
    return element;
};

示例元素生成函数调用:

 gE('.name', "White on Purple", "background: rgba(" + color + "); color: white");

在哪里var color = "100, 000, 100, 100";

谁能告诉我为什么这在 Firefox 中按预期工作,但在其他浏览器中却没有?更好的是,任何人都可以提出建议,以便我可以让它跨浏览器工作吗?

在 Firefox 中按预期工作:

在 Chrome 中无法正常工作:

【问题讨论】:

  • 为什么不改为生成 CSS 规则?
  • @SLaks - 首先 - 感谢您在下面的回答!回答您的问题 - 因为每个用户(每个页面可能会有很多用户可见)都有自己的颜色,并且该颜色将在一个上下文中用作背景,在不同上下文中用作文本颜色,看起来最适合内联实际样式。 (查看HashColors 以更好地了解我在说什么。)
  • 动态生成 CSS 样式表可能更有效,尤其是在以后可能添加新的 cmets 时。

标签: javascript css google-chrome firefox cross-browser


【解决方案1】:

Element.style 属性返回一个对象,每个样式都有一个属性;不是字符串。

您应该调用setAttribute("style", style) 来实际设置属性。

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2010-12-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-03
  • 1970-01-01
相关资源
最近更新 更多