假设我想将div的display属性设置为inline-block。在CSS中我会做类似以下的事情:
#divid {
display:inline-block;
/* And now for IE6 and IE7 */
zoom:1;
*display:inline;
}
但现在假设我希望能够使用纯JavaScript或jQuery动态地将div的display属性更改为inline-block。还假设我不知道相关页面的HTML和CSS;我刚刚通过了div,我需要改变它的属性。如果我不担心IE6和IE7,那很简单:
$("#divid").css("display", "inline-block");
但是尝试处理IE6和IE7并不简单。以下不起作用:
$("#divid").css("*display", "inline");
有没有人有任何想法?
答案 0 :(得分:6)
编辑:正如@thirtydot指出的那样,这来自.animate
方法,在执行.css
时不会应用。
我能想到的最好的选择是自己使用类似的东西。您可以检测内联块元素是否需要layout
hack,并根据具体情况设置属性。
if ( !jQuery.support.inlineBlockNeedsLayout ) {
$("#divid").css("display", "inline-block");
} else {
$("#divid").css("display", "inline");
$("#divid").css("zoom", "1");
}
- 旧答案 -
如果您只是$("#divid").css("display", "inline-block");
来自jQuery source
if ( jQuery.css( this, "display" ) === "inline" &&
jQuery.css( this, "float" ) === "none" ) {
if ( !jQuery.support.inlineBlockNeedsLayout ) {
this.style.display = "inline-block";
} else {
display = defaultDisplay( this.nodeName );
// inline-level elements accept inline-block;
// block-level elements need to be inline with layout
if ( display === "inline" ) {
this.style.display = "inline-block";
} else {
this.style.display = "inline";
this.style.zoom = 1;
}
}
}
答案 1 :(得分:0)
只需使用jQuery来应用CSS类,并使用条件注释在IE 6和7中为该类指定不同的规则。这将大大简化您的Javascript。
答案 2 :(得分:0)
这可能有些问题,但它似乎对我有用。如有必要,请编辑。在您的javascript中的某处添加此代码将挂钩到jQuery.css并使IE7正确显示内联块。
(function($) {
// first, check to see if cssHooks are supported
if ( !$.cssHooks ) {
return;
}
$.cssHooks["display"] = {
get: function( elem, computed, extra ) {
if($.support.inlineBlockNeedsLayout && elem.style.display == 'inline' && elem.style.zoom == '1') {
return 'inline-block';
}
return elem.style.display;
},
set: function( elem, value ) {
try {
if($.support.inlineBlockNeedsLayout && value == 'inline-block') {
elem.style.zoom = '1';
elem.style.display = 'inline';
return;
}
elem.style.display = value;
} catch(e){}
}
};
})(jQuery);
用法:
$('selector').css('display', 'inline-block');