IE9: Why setting “-ms-transform” works from css, but not with jquery.css()

后端 未结 3 1669
逝去的感伤
逝去的感伤 2020-12-03 10:22

This works

div{
    -ms-transform: rotate(30deg);
}

And following does not

$(\"div\").css(\"-ms-transform\",\"rotate(30deg)         


        
相关标签:
3条回答
  • 2020-12-03 10:29

    Not sure why As KooiInc says, dashes in style property names are invalid in DOM scripting.

    You can fix it by using object notation and passing in the name in camel case instead of hyphenated, like this:

    $('div').css({ msTransform: 'rotate(30deg)' });
    

    jsFiddle preview

    0 讨论(0)
  • 2020-12-03 10:30

    The dash ('-') in the property is invalid for use in scripting. You should use msTransform instead.

    By the way: though a number of browsers do understand and parse css like style['background-color'] from scripting, afaik Firefox doesn't. Furthermore I think JQuery .css(...) transforms properties like 'background-color' to their DOM-scripting equivalent ('backgroundColor' in this case) before parsing it.

    To be complete: JQuery.css indeed transforms dashed properties to camelCase. Here's a representation of the JQuery.css-internals with the string '-ms-transform':

    var fcamelCase = function( all, letter ) {
            return letter.toUpperCase();
        };
    var rdashAlpha = /-([a-z])/ig;
    // JQuery.css does a replace operation with these variables 
    // on the raw property string:
    alert('-ms-transform'.replace(rdashAlpha,fcamelCase)); //=> msTransform
    

    So that's why $("div").css("-ms-transform","rotate(30deg)") doesn't work in IE9. IE9 expects: msTransform.

    Why then, does $("div").css("-moz-transform", "rotate(-90deg)") work in Firefox? Because Mozilla evidently decided to use complete CamelCase for their -moz-[properties], so the MozTransform scripting style property is valid (and, by the way, mozTransform isn't ... really).

    It's all to the browser then, nothing new under the digital sun.

    0 讨论(0)
  • 2020-12-03 10:54

    jQuery 1.8 brings automatic vendor prefix support, so this now works for all browsers:

    $("div").css("transform","rotate(30deg)");
    
    0 讨论(0)
提交回复
热议问题