Javascript 如何混合使用jQuery和IE CSS技术?
假设我想将div的display属性设置为inline块。在CSS中,我将执行以下操作:Javascript 如何混合使用jQuery和IE CSS技术?,javascript,jquery,css,Javascript,Jquery,Css,假设我想将div的display属性设置为inline块。在CSS中,我将执行以下操作: #divid { display:inline-block; /* And now for IE6 and IE7 */ zoom:1; *display:inline; } 但是现在假设我希望能够使用纯JavaScript或jQuery动态地将div的display属性更改为inline块。还假设我不知道相关页面的HTML和CSS;我刚通过div,需要更改它的属性。如果
#divid {
display:inline-block;
/* And now for IE6 and IE7 */
zoom:1;
*display:inline;
}
但是现在假设我希望能够使用纯JavaScript或jQuery动态地将div的display属性更改为inline块。还假设我不知道相关页面的HTML和CSS;我刚通过div,需要更改它的属性。如果我不担心IE6和IE7,这很简单:
$("#divid").css("display", "inline-block");
但尝试处理IE6和IE7并不简单。以下操作不起作用:
$("#divid").css("*display", "inline");
有人有什么想法吗?编辑:正如@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(“显示”、“内联块”),jQuery应该自动执行代码>
从jQuery
只需使用jQuery应用CSS类,并在IE6和IE7中使用条件注释为该类指定不同的规则。这将大大简化Javascript 这可能有一些问题,但对我来说似乎还行。如有必要,请编辑。在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');
我希望有一个只支持jQuery的方法,这样我就知道如何在jQuery插件的上下文中实现它了。你没有显示你在哪个函数中找到了它。我只能在.animate()
中找到它,在.css()
中找不到它。你能验证你的答案吗?嗯,使用$(“#divid”)。css(“display”,“inline block”)不会使div像IE6或IE7中的内联元素一样工作(例如,在结束标记出现在新行之后的文本)。我也在使用最新版本的jQuery(1.6.1)。@thirtydot,对不起,你说得对。我没有注意到这只是在.animate
方法中。
$('selector').css('display', 'inline-block');