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

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

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

                //indexOf方法在某些浏览器需要自行实现 

                //是则放入选择器中 

                ret.push( cur ); 

                break; 

            } else { 

                //  否则把当前节点变为其父节点 

                cur = cur.parentNode; 

                //如果没有父节点(说明其还没有插入DOM树),或不是元素节点,或是文档碎片(说明其刚被移出DOM树) 

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

                    break; 

                } 

            } 

        } 

    } 

    //如果大于1,进行唯一化操作 

    ret = ret.length > 1 ? jQuery.unique( ret ) : ret; 

    //将节点集合重新包装成一个新jQuery对象返回 

    return $(ret);//本人觉得pushStack真是个邪恶的方法,让菜鸟不籽有链下去的欲望,殊不知这是维护的大敌 

},

注意,jquery1.6中closest方法不再是返回包含一个或零个节点的jQuery对象了,再是对应多个了(因此jQuery官网文档是错误的,没有即时同步这变化.)

<!doctype html> 

<html> 

  <head> 

    <title>closest在jquery1.6的改变 by 司徒正美</title> 

    <script src="jquery.js"></script> 

    <script> 

      $(function(){ 

        $("p").delegate("strong","click",function(){ 

          alert(this.innerHTML) 

        }); 

        alert($("strong").closest("p").length) 

      }); 

  

    </script> 

  

  </head> 

  <body> 

    <p> 

      <strong>使用事件代理1</strong> 

    </p> 

    <p> 

      <strong>使用事件代理2</strong> 

    </p> 

    <p> 

      <strong>使用事件代理3</strong> 

    </p> 

  </body> 

</html>

下面是我的实现:

closest: function( exPR ) { 

    // 如果字符串包含位置伪类或者是个元素节点,则封装为一个dom对象,否则为0(即false的简写,用于快速跳过分支) 

    var node =  expr.nodeType ? expr : 0, nodes = dom.slice(this);//将它转换为纯数组 

    //遍历原dom对象的节点 

    for (var i = 0, ret = [], cur; cur = this[i++];) {//由于肯定里面都是节点,因此可以使用这种循环 

        while (cur && cur.nodeType === 1 ) { 

            //如果是dom对象,则判定其是否包含当前节点,否则使用matchesSelector方法判定这个节点是否匹配给定的表达式expr 

            if ( node ? nodes.indexOf(node) > -1 : matchElement( cur, expr ) ){ 

                //indexOf方法在某些浏览器需要自行实现 

                //是则放入选择器中 

                ret.push( cur ); 

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