免费邮箱 |加入收藏 | 会员中心 | 我要投稿 | RSS
您当前的位置:首页 > .NET专区 > ASP.NET技巧

如何理解与简化jquery的closest函数

时间:2011-05-19 14:13:10  来源:站内  作者:潘春会

在实现delegate方法中,有一个很重要的辅助函数叫closest,虽然现在它归类为遍历节点这个模块中。这个函数实现得非常复杂,洋洋洒洒近50行,完全不符合极限编程的规矩。

closest: function( selectors, context ) { 

    var ret = [], i, l, cur = this[0]; 

      

    // Array 

    if ( jQuery.isArray( selectors ) ) {//这分支的过滤逻辑基本与下面的一致 

        var match, selector, 

            matches = {}, 

            level = 1; 

 

        if ( cur && selectors.length ) { 

            for ( i = 0, l = selectors.length; i < l; i++ ) { 

                selector = selectors[i]; 

 

                if ( !matches[ selector ] ) { 

                    matches[ selector ] = POS.test( selector ) ? 

                        jQuery( selector, context || this.context ) : 

                        selector; 

                } 

            } 

 

            while ( cur && cur.ownerDocument && cur !== context ) { 

                for ( selector in matches ) { 

                    match = matches[ selector ];//这里频繁创建新的jQuery对象与使用is这样复杂的方法,我不觉得其高效到哪里去 

 

                    if ( match.jquery ? match.index( cur ) > -1 : jQuery( cur ).is( match ) ) { 

                        ret.push({ selector: selector, elem: cur, level: level }); 

                    } 

                } 

 

                cur = cur.parentNode; 

                level++; 

            } 

        } 

 

        return ret; 

    } 

 

    // String 

    var pos = POS.test( selectors ) || typeof selectors !== "string" ? 

            jQuery( selectors, context || this.context ) : 

            0; 

 

    for ( i = 0, l = this.length; i < l; i++ ) { 

        cur = this[i]; 

 

        while ( cur ) { 

            if ( pos ? pos.index(cur) > -1 : jQuery.find.matchesSelector(cur, selectors) ) { 

                ret.push( cur ); 

                break; 

 

            } else { 

                cur = cur.parentNode; 

                if ( !cur || !cur.ownerDocument || cur === context || cur.nodeType === 11 ) { 

来顶一下
返回首页
返回首页
发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表
推荐资讯
如何找出DHCP地址池里未使用的IP地址
如何找出DHCP地址池里
国内常用的DNS列表
国内常用的DNS列表
Linux邮件服务器软件比较
Linux邮件服务器软件比
学用纯CSS打造可折叠树状菜单
学用纯CSS打造可折叠树
相关文章
栏目更新
栏目热门