代码之家  ›  专栏  ›  技术社区  ›  David Hellsing

注入的链接样式表优先于IE7中的现有样式+

  •  4
  • David Hellsing  · 技术社区  · 14 年前

    当级联动态样式表时,IE中似乎有一个bug。有人知道有没有解决办法吗?考虑一下:

    <head>
        <style>#test{background:red;}</style>
    </head>
    <body>
        <div id="test">test</div>
        <script>
            var link = document.createElement('link');
            var style = document.getElementsByTagName('style')[0];
            link.rel = 'stylesheet';
            link.href = 'test.css';
            style.parentNode.insertBefore(link, style);
        </script>
    </body>
    

    注入的“test.css”包含 #test{background:green} .

    即使我们把 <link> <style> 标签,IE7+将用注入的样式表覆盖样式,并应用绿色作为背景。

    1 回复  |  直到 8 年前
        1
  •  1
  •   Michael Sparks    14 年前

    我认为这是IE以前定义插入的方式造成的。在IE only中,您只能将一个参数传递到insertBefore方法中,它的行为与appendChild相同。我认为他们所做的就是插入它然后移动它。如果它们在插入点渲染,那么它将正确渲染。

    我能想到的唯一解决办法是如下(这并不理想):

        var link = document.createElement('link');
        var style = document.getElementsByTagName('style')[0];
        var newstyle = style.cloneNode(true);
        link.rel = 'stylesheet';
        link.href = 'test.css';
        style.parentNode.insertBefore(link, style);
        style.replaceNode(newstyle);