代码之家  ›  专栏  ›  技术社区  ›  Kennet Belenky

属性选择器、JavaScript和IE8

  •  5
  • Kennet Belenky  · 技术社区  · 15 年前

    HTML看起来像:

    <div id="user" highlight="false">User Name</div>
    

    [highlight=true]
    {
        background-color: red;
    }
    
    [highlight=false]
    {
        background-color: white;
    }
    

    还有一些附带的JavaScript:

    if( foo )
    {
        node.setAttribute('highlight', true);
    }
    else
    {
        node.setAttribute('highlight', false);
    }
    

    这在Firefox和Chrome中有效。当highlight属性被JavaScript更改时,元素的背景颜色会相应地更改。然而,在IE8中,情况就不同了。元素将根据最初在HTML中分配的highlight值正确显示,但是当属性动态更改时,元素的显示不会更改。

    这是一个已知的怪癖吗?有没有已知的工作?

    更新 我刚刚将属性名改为“frob”,值为“on”和“off”,这样就可以解决关于保留值或可解释值的任何问题。

    还有一件事值得注意。当我打开IE8开发工具并使用HTML检查器时,它将显示样式[frob=on]或[frob=off]作为启动文档检查器时frob的任何值的应用。但是,frob属性将不再在inspector视图中更改。在任何情况下,[frob=on/off]css中的值都不会在HTML的初始呈现之后应用。

    更新:问题已解决 解决办法是强制重画。有多种方法可以做到这一点,但标准的方法似乎是将类名重新分配给自己。

    5 回复  |  直到 15 年前
        1
  •  2
  •   Crozin    15 年前

    你在使用未知属性 hightlight . 它是IE,所以它根据名称支持属性(这似乎比支持每个属性名称都难,但是。。。是IE)。

    class="hightlight" -更容易实施和处理。

        2
  •  1
  •   Pekka    15 年前

    您正在将属性设置为JavaScript true false "true" "false" . 这个 被浏览器解释为 1 0 并导致不必要的结果。

    你能试试吗

    node.setAttribute('highlight', 'true');
    

        3
  •  0
  •   Derek Adair    15 年前

    为了避免不可避免的跨浏览器兼容性问题,我建议使用JavaScript/CSS。 jQuery .

    $("div").click(function () {
          $(this).effect("highlight", {}, 3000);
    });
    
        5
  •  0
  •   Community Mohan Dere    8 年前

    检查以确保在页面顶部定义了DOCTYPE: Css attribute selector for input type="button" not working on IE7