Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Jquery css()-marginLeft vs.marginLeft?_Jquery_Css_Margin - Fatal编程技术网

Jquery css()-marginLeft vs.marginLeft?

Jquery css()-marginLeft vs.marginLeft?,jquery,css,margin,Jquery,Css,Margin,对于jQuery.css(),我被告知可以使用以下两个函数获得相同的结果: $(".element").css("marginLeft") = "200px"; $(".element").css("margin-left") = "200px"; 我一直使用marginLeft,因为这是文档中使用的内容: 简写CSS属性(例如边距、背景、边框)不可用 支持。例如,如果要检索渲染的边距, 使用:$(elem.css('marginTop')和$(elem.css('marginRight'

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

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

$(".element").css("margin-left") = "200px";
我一直使用
marginLeft
,因为这是文档中使用的内容:

简写CSS属性(例如边距、背景、边框)不可用 支持。例如,如果要检索渲染的边距, 使用:$(elem.css('marginTop')和$(elem.css('marginRight'),依此类推 开


为什么jQuery允许
marginLeft
以及
左边距
?它似乎毫无意义,需要使用更多的资源来转换为CSS
左边距

jQuery只是支持CSS的编写方式

此外,它还确保无论浏览器如何返回值,都能被理解

jQuery同样可以解释 多个单词属性。例如,jQuery理解并返回 .css('background-color')和 .css(“背景色”)


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

$(".element").css( { marginLeft : "200px", marginRight : "200px" } );
如您所见,属性未指定为字符串。如果您仍然希望使用破折号,或者对于没有破折号可能无法设置的属性,JQuery还支持使用字符串,因此以下内容仍然有效

$(".element").css( { "margin-left" : "200px", "margin-right" : "200px" } );
如果没有这里的引号,javascript将无法正确解析,因为属性名中不能有破折号


EDIT:JQuery似乎并没有真正区分它的左边,相反,它只是传递为DOM指定的要关注的属性,很可能是使用
style[propertyName]

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

element.style.marginLeft = "10px";
相当于:

element.style["margin-left"] = "10px";
为什么jQuery既允许保留保证金,也允许保留保证金?它似乎毫无意义,并使用更多的资源转换到CSS页边距左侧


jQuery并没有做什么特别的事情。它可能会更改或代理传递给
.css()
的某些字符串,但实际上jQuery团队没有投入任何工作来允许传递这两个字符串。没有使用额外的资源,因为DOM完成了这项工作。

当使用的是marginLeft时:

$("div").css({ marginLeft:'12px', backgroundPosition:'10px -10px', minHeight: '40px' }); 理论上,两个代码块将做相同的事情。我们可以在第二个块上使用连字符,因为它是一个字符串值,而与第一个块相比,它在某种程度上是一个对象。

现在这应该有道理了。

嗨,我试过这个,它正在工作

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

回答得晚,但没有人指定带破折号的css属性在jquery的对象声明中不起作用:

.css({margin-left:'200px'});//won't work
.css({marginLeft:'200px'});//works
所以,如果您喜欢在jquery代码中使用破折号样式属性,请不要忘记使用引号

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

jQuery在这里没有做的事情得到了认可,底层DOM处理两个不同的字符串。“引擎不需要转换字符串。”lol什么?我认为您需要了解属性是如何工作的。@Raynos,是的,但是在这个过程中,有些东西必须解析其中的一个(或者可能两者都解析),以确定它实际上想要做什么。现在,通过阅读另一个答案,我承认JQuery在调用DOM style[]属性时可以同时使用字符串版本,因此在这种情况下没有区别,因为DOM仍然以任何方式使用字符串(或者JQuery以不同的方式传递它们-我找不到任何资源来证明这两种方式)不,同样,对象上的属性不是这样工作的,它们都是字符串
marginLeft:“200px”
只是
“marginLeft:“200px”
的糖。解析是在加载文件时完成的,而不是在运行时。可以说它的速度稍微慢了一点(几纳秒?),但这是一个史诗般的微观优化。@musefan您是否考虑过您的代码比Andy E的慢95%@雷诺斯:好吧,现在我们有进展了。我没有意识到解析是在运行时完成的。谢谢你提供的信息;)作为旁白,与课堂相比,速度非常慢。基本上,
.style
.css
是魔鬼。
.css({'margin-left':'200px'});//works