【问题标题】:How to read CSS property of Psuedo class in javascript如何在javascript中读取伪类的CSS属性
【发布时间】:2012-03-14 00:48:28
【问题描述】:

我已经搜索过 SO 并在 Google 上搜索过,关于如何读取 CSS 属性有很多答案,但不允许读取伪类属性。

我已使用以下内容让我可以轻松地在许多产品上重复使用某些页面(固件/配置上传)。

.productname:before
{
    content: "My Shiny New Product";
}

然后

<span class="productname" />

在 html 中插入正确的名称。

目前,当向服务器发送固件更新时,不会对客户端浏览器进行检查,服务器会返回 [请重新启动以继续...] 或 [这不是 [产品名称] 更新文件]。可以想象,固件更新可能非常大,如果通过 3G 传输需要一些时间。

我想从 CSS :before 伪类中获取产品名称,以便在发送之前检查上传文件名。我已经实现了这个JS Fiddle 来说明这个问题。

我曾尝试将 content 属性直接放在 .productname 类上(作为副本占位符),FF、Opera 和 Safari 会读取此内容,但您猜它 IE 返回未定义。

我知道我可以在 JS 中使用全局变量并且可能必须这样做,但我宁愿将它定义在一个地方以避免潜在的错误。

那么有人知道如何(或解决方法)读取 :pseudo CSS 类的属性吗?

提前致谢。

更新

由于我无法获得 IE8 的解决方案,我已改为使用以下代码。

window.addEvent( "domready",
function()
{
  window.productName = "My Shiny New Product";      

  var def = '.productname:before { content: "'+window.productName+'"; }';

  var style = new Element("style");
  style.setAttribute( "type", "text/css" );
  if( style.styleSheet )
  {
     style.styleSheet.cssText = def;
  }
  else
  {
    style.innerHTML = def;
  }
  document.getElementsByTagName("head")[0].appendChild(style);
  document.getElementsByTagName("head")[0].appendChild(style);
} );

参考本站Dynamic SCRIPT and STYLE elements in IE

【问题讨论】:

  • @bPratik - 感谢您的评论,但使用 :before 文本不在 html 文档中,我认为不能以这种方式访问​​它。在 Firebug 和我的 Fiddle 中,前一个兄弟(div)的内容是空的。
  • @Manishearth - 有趣的问题(和答案),但不确定这与我的问题有何关系。我考虑过在 JS 中定义名称并动态创建 CSS 类,这可能是最好的解决方案。

标签: javascript css cross-browser


【解决方案1】:

您可以使用window.getComputedStyle。但是,an answer 指出,某些浏览器可能不支持此功能,因此请谨慎行事。 here's a demo

<span class="test" />
<span class="test" />
<span class="test" />

.test:before{
    content: "My Shiny New Product";
}

$(function() {

    //get all element class test
    var test = $('.test');

    //each of them, alert the content
    test.each(function() {
        var style = window.getComputedStyle(this, "before");
        alert(style.content);
    });
});​

【讨论】:

  • 谢谢,但测试你的演示它似乎只在 Safari 中工作。 FF 和 Opera 警告:无,IE 失败,对象不支持该方法。
  • 更改代码以使用 getComputedStyle(this, ":before" );使其在除 IE 之外的所有浏览器中均可使用,遗憾的是 90% 以上的客户将使用 IE,并且大多数将无法切换到其他浏览器。
  • @Dampsquid 我无法测试 IE 因为我没有 IE :D。您可以检查用户的浏览器并使用“之前”或“:之前”。
  • :之前适用于所有人不需要检查 IE,因为它在 IE 中不起作用(无论如何是 8),我已经更改了我的代码以使用 JS 变量,并且在 domready 我创建了 cssstyle动态地,至少这意味着只在一个地方定义。无论如何,我会接受你的回答,因为我认为它尽可能接近跨浏览器,当我重新开始工作时,我会检查 IE 9。
猜你喜欢
  • 2023-03-08
  • 2012-06-27
  • 2022-01-08
  • 1970-01-01
  • 1970-01-01
  • 2016-03-26
  • 1970-01-01
  • 2015-09-01
  • 1970-01-01
相关资源
最近更新 更多