3

假设我有以下 jQuery:

// pseudocode  :
$(this)
    .doSomething
    .doSomething
    .selectSomething
        .doSomething
        .animate({ 
            opacity: 1
        }, 150)
        .end()
    .selectSomethingElse
        .doSomething

我希望执行上述操作。但是,如果浏览器是 IE,我不希望执行动画部分(因为 IE 无法使用透明 PNG 为对象设置动画并保留 PNG 透明度)。

无论如何要保持良好的链式 jquery 语法,但基于某些 if 逻辑以某种方式跳过动画部分(在这种情况下测试 IE)?

4

3 回答 3

6

您可以执行each()一个函数并将其传递给它来处理动画,这应该可以工作。

$(this)
    .doSomething
    .doSomething
    .selectSomething
        .doSomething
        .each(function() {
            // Will return false on IE, true on others
            if(jQuery.support.opacity) {
                $(this).animate({ 
                    opacity: 1
                }, 150);
            }
        })        
    .end()
.selectSomethingElse
    .doSomething
于 2010-01-15T21:45:40.903 回答
1

您可以使用filter过滤掉 IE:

$(this).filter(function() {
    return $.support.opacity;
}).animate({ 
    opacity: 1
}, 150);
于 2010-01-15T22:45:13.310 回答
0

在此之前我会有一段代码检查 IE,如果找到,删除第一个“.selectSomething”正在使用的任何选择器。或者,稍微修改 .selectSomething 使其检查仅存在于非 IE 浏览器中的附加类。

它有助于使您的浏览器检测逻辑保持独立。

于 2010-01-15T21:45:57.300 回答