将'if'逻辑添加到jQuery链中

时间:2010-01-15 21:42:47

标签: jquery jquery-chaining

假设我有以下jQuery:

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

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

无论如何都要维护漂亮的链式jquery语法,但不知何故基于某些if逻辑跳过动画部分(在这种情况下测试IE)?

3 个答案:

答案 0 :(得分: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

答案 1 :(得分:1)

您可以使用filter过滤IE:

$(this).filter(function() {
    return $.support.opacity;
}).animate({ 
    opacity: 1
}, 150);

答案 2 :(得分:0)

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

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