Javascript 使用jquery为多个浏览器设置flexbox显示?

Javascript 使用jquery为多个浏览器设置flexbox显示?,javascript,jquery,css,flexbox,Javascript,Jquery,Css,Flexbox,有点麻烦。我需要从display:none切换到display:flex、display:flex-box和display:-ms-flexbox,但它似乎破坏了我的代码。。以下是我目前掌握的情况: $(elem).css({'display': 'flex', 'display': '-webkit-flex', 'display':'-ms-flexbox'}); 虽然这样做有效: $(elem).css({'display': 'flex'}) 我需要另外两个用于safari和IE10

有点麻烦。我需要从display:none切换到display:flex、display:flex-box和display:-ms-flexbox,但它似乎破坏了我的代码。。以下是我目前掌握的情况:

$(elem).css({'display': 'flex', 'display': '-webkit-flex', 'display':'-ms-flexbox'});
虽然这样做有效:

$(elem).css({'display': 'flex'})

我需要另外两个用于safari和IE10。有没有什么方法可以写这个,这样就不会破坏我的代码?Jquery似乎被这种语法弄糊涂了。

我刚刚遇到了同样的问题。问题是不能在同一对象中指定多个
display
值,因为只能有一个名为
display
的对象成员

如果您不担心意外删除任何其他元素级样式,可以采用以下方法:

$(elem).attr('style', 'display: -webkit-flex; display: flex');
(当然,如果需要,可以为IE10添加额外的一个)


很抱歉这么晚才参加聚会,但可能会对其他人有所帮助。

我也遇到过这个问题,@eaj非常了解为什么会发生这种情况。我采取了一种稍微不同的方法,因为我在其他元素上使用flexbox。我分配了这样一个班:

.flex-container{
    display: -webkit-box !important;
    display: -moz-box !important;
    display: -ms-flexbox !important;
    display: -webkit-flex !important;
    display: flex !important;
}
然后,您可以像这样添加类,而不是尝试通过添加内联样式来更改它:

$(elem).addClass('flex-container');

!重要提示:类中的
将覆盖现有的显示:无强制显示。这里有两个优点:它在语义上更简洁,如果需要,可以更容易地添加其他flexbox属性(我的实际.flex容器类由于中心对齐的前缀而有大约20个不同的属性),更容易为其他元素重用同一类,最后,如果您需要元素再次优雅地显示,您可以调用removeClass()。

,因为jQuery 1.8.0不需要添加供应商前缀。 诚挚地
Frederic

您应该始终订购带前缀的旧>带前缀的新>无前缀。感谢您的回复!这有什么特别的原因吗?浏览器读得快吗?啊,等等,我知道为什么,由于计算机读css的顺序,不带前缀的会先读不?不。浏览器应该忽略任何他们不懂的东西,同一属性的最后一个声明应该优先。各位,请注意:当我遇到statet时的第一个答案是:“因为jQuery 1.8.0不需要添加供应商前缀。”在这种情况下,这是不正确的!!!jQuery确实将供应商前缀添加到CSS属性名称中-jepp这是真的(例如:
-前缀转换:…
)。但是这个问题是关于前缀CSS值而不是属性名的-不-jQuery不考虑CSS值,例如
display:-前缀flex
background:-前缀线性渐变
!这在这种情况下是不正确的!!!jQuery不给css属性名加前缀-jepp这是真的(例如:
-前缀transorm:…
)。但这个问题是关于前缀CSS值,而不是属性名!