使用javascript添加CSS渐变 - IE7中的错误

时间:2010-12-20 18:15:36

标签: javascript css selector explicit internet-explorer-7

我正在尝试仅在.link.box.gradient添加渐变,但在ie7中添加.link.box.gradient.style.box.gradient

<!DOCTYPE html>
<html lang="sv">
    <head>
    <title></title>
        <script src="http://ajax.microsoft.com/ajax/jQuery/jquery-1.4.4.min.js"></script>
        <script>
            jQuery(function ($) {
                $('head').append("<style>.link.box{height:100px;width:100px;}.link.box.gradient{filter:progid:DXImageTransform.Microsoft.gradient(startColorStr='#000000',EndColorStr='#ffffff');}</style>");
            });
        </script>
    </head>
    <body>
        <div class="style box gradient">Gradient (style-tag)</div>
        <div class="link box gradient">Gradient (link-tag)</div>
    </body>
</html>

你也可以在这里看到,http://jsfiddle.net/Zhvpy/ 一个奇怪的事情是当我从javascript中移出.link.box {height:100px; width:100px;},你可以在这里看到http://jsfiddle.net/Zhvpy/1它似乎有效,但我不想搬出去。

为什么会这样?我该如何修复这个错误?

1 个答案:

答案 0 :(得分:2)

删除了原始错误答案

编辑1

奇怪 - 决定它可能是旧版本的IE处理某些元素(如<script />)所以尝试a non-jQuery solution的方式。 似乎工作!

编辑2

将此添加到完整脚本中 - 输出与IE8输出更符合的不同结果

function appendStyle(element, cssObj) {
    //$('#a').append($('<span/>').text(cssObjToText(cssObj)));
    if ($.browser.version == 7) {
        var head = document.getElementsByTagName('head')[0],
            style = document.createElement('style'),
            rules = document.createTextNode(cssObjToText(cssObj));

        style.type = 'text/css';

        head.appendChild(style);

        style.styleSheet.cssText = rules.nodeValue;
    }
    else {
        element.after('<style class="css-finalized">' + cssObjToText(cssObj) + '</style>');
    }
}