Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/86.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
Javascript 如何混合使用jQuery和IE CSS技术?_Javascript_Jquery_Css - Fatal编程技术网

Javascript 如何混合使用jQuery和IE 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,需要更改它的属性。如果

假设我想将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,需要更改它的属性。如果我不担心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');