jQuery.css() – marginLeft与margin-left?

使用jQuery.css()我已经被告知我可以使用以下两个函数获得相同的结果:

$(".element").css("marginLeft") = "200px"; $(".element").css("margin-left") = "200px"; 

我一直使用marginLeft因为这是在文档中使用的:

http://api.jquery.com/css/

不支持简写CSS属性(例如页边距,背景,边框)。 例如,如果要检索呈现的边距,请使用:$(elem).css('marginTop')和$(elem).css('marginRight')等等。

为什么jQuery允许marginLeft以及margin-left ? 这似乎毫无意义,并使用更多的资源被转换为CSS margin-left

jQuery的底层代码将这些string传递给DOM,这允许您以非常类似的方式指定CSS属性名称或DOM属性名称:

 element.style.marginLeft = "10px"; 

相当于:

 element.style["margin-left"] = "10px"; 

为什么jQuery允许marginLeft以及margin-left? 这似乎毫无意义,并使用更多的资源被转换为CSS余裕?

jQuery没有什么特别的。 它可能会改变或代理你传递给.css()一些string,但实际上jQuery团队没有任何工作可以让string被传递。 没有额外的资源被使用,因为DOM完成了这项工作。

我认为这是因为它可以保持一致性,通过使用一个对象在一个函数调用中设置多个CSS样式时使用的可用选项,例如…

 $(".element").css( { marginLeft : "200px", marginRight : "200px" } ); 

你可以看到这个属性没有被指定为string。 JQuery也支持使用string,如果你仍然想使用破折号,或者可能不能没有短划线设置的属性,所以下面仍然工作…

 $(".element").css( { "margin-left" : "200px", "margin-right" : "200px" } ); 

没有这里的引号,JavaScript不会正确parsing,因为属性名称不能在其中有短划线。

编辑:看来,JQuery实际上并没有做出区别itsleft,而是它只是传递给DOM指定的属性关心,最有可能与style[propertyName];

jQuery只是简单地支持CSS的写法。

而且,它确保无论浏览器如何返回一个值,都将被理解

jQuery可以同样解释多字属性的CSS和DOM格式。 例如,jQuery可以理解并返回.css('background-color')和.css('backgroundColor')的正确值。

何时使用marginLeft

 $( “格”)。CSS({
     marginLeft: '12像素',
     backgroundPosition:'10px -10px',
     minHeight:'40px'
 });

正如你所看到的,连字符的属性被转换为camelcased格式。 使用前面的代码块margin-leftmargin-left会使JavaScript烦人,因为它会将连字符当作减法运算。

何时余量使用:

 $(“div”).css(“margin-left”,“12px”).css(“background-position”,“10px-10px”).css(“min-height”,“40px”);

理论上讲,两个代码块都会做同样的事情。 我们可以在第二个块上使用连字符,因为它是一个string值,而与第一个块相比,它是一个对象。
现在应该是有道理的。

迟到回答,但没有人指定使用短划线的css属性在jquery中的对象声明中不起作用:

 .css({margin-left:'200px'});//won't work .css({marginLeft:'200px'});//works 

所以,如果你喜欢在jQuery代码中使用短划线样式属性,请不要忘记使用引号。

 .css({'margin-left':'200px'});//works 

嗨,我试过这是工作。

 $("#change_align").css({"margin-top":"-39px","margin-right":"0px","margin-bottom":"0px","margin-left":"719px"});