您当前的位置: 首页 >  ar

wespten

暂无认证

  • 0浏览

    0关注

    899博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

深入学习jquery源码之parent()和parents()与parentsUntil()

wespten 发布时间:2018-12-29 06:45:57 ,浏览量:0

深入学习jquery源码之parent()和parents()与parentsUntil()

parent([expr])

概述

取得一个包含着所有匹配元素的唯一父元素的元素集合。

你可以使用可选的表达式来筛选。

参数

expr String

用来筛选的表达式

查找每个段落的父元素

Hello

Hello

$("p").parent()
[ 

Hello

Hello

]

查找段落的父元素中每个类名为selected的父元素。

Hello

Hello Again

$("p").parent(".selected")
[ 

Hello Again

]

 

parents([expr])

概述

取得一个包含着所有匹配元素的祖先元素的元素集合(不包含根元素)。可以通过一个可选的表达式进行筛选。

参数

expr String

用于筛选祖先元素的表达式

找到每个span元素的所有祖先元素。

Hello

Hello Again
$("span").parents()

找到每个span的所有是p元素的祖先元素。

$("span").parents("p")

 

parentsUntil([expr|element][,filter])

概述

查找当前元素的所有的父辈元素,直到遇到匹配的那个元素为止。

如果提供的jQuery代表了一组DOM元素,.parentsUntil()方法也能让我们找遍所有元素的祖先元素,直到遇到了一个跟提供的参数匹配的元素的时候才会停下来。这个返回的jQuery对象里包含了下面所有找到的父辈元素,但不包括那个选择器匹配到的元素。

参数

[expr][,filter] String,String

expr: 用于筛选祖先元素的表达式

filter: 一个字符串,其中包含一个选择表达式匹配元素。

[element][,filter] DOMElement,String

element:用于筛选祖先元素的DOM元素

filter: 一个字符串,其中包含一个选择表达式匹配元素。

查找item-a的祖先,但不包括level-1

  • I
  • II
    • A
    • B
      • 1
      • 2
      • 3
    • C
  • III
$('li.item-a').parentsUntil('.level-1')
    .css('background-color', 'red');

 

jquery源码

    jQuery.extend({
        dir: function (elem, dir, until) {
            var matched = [],
                cur = elem[dir];

            while (cur && cur.nodeType !== 9 && (until === undefined || cur.nodeType !== 1 || !jQuery(cur).is(until))) {
                if (cur.nodeType === 1) {
                    matched.push(cur);
                }
                cur = cur[dir];
            }
            return matched;
        },
        sibling: function (n, elem) {
            var r = [];

            for (; n; n = n.nextSibling) {
                if (n.nodeType === 1 && n !== elem) {
                    r.push(n);
                }
            }

            return r;
        }
    });
	
	
	
	    function sibling(cur, dir) {
        do {
            cur = cur[dir];
        } while (cur && cur.nodeType !== 1);

        return cur;
       }
	
    jQuery.each({
        parent: function (elem) {
            var parent = elem.parentNode;
            return parent && parent.nodeType !== 11 ? parent : null;
        },
        parents: function (elem) {
            return jQuery.dir(elem, "parentNode");
        },
        parentsUntil: function (elem, i, until) {
            return jQuery.dir(elem, "parentNode", until);
        }
    }, function (name, fn) {
        jQuery.fn[name] = function (until, selector) {
            var ret = jQuery.map(this, fn, until);

            if (name.slice(-5) !== "Until") {
                selector = until;
            }

            if (selector && typeof selector === "string") {
                ret = jQuery.filter(selector, ret);
            }

            if (this.length > 1) {
                // Remove duplicates
                if (!guaranteedUnique[name]) {
                    ret = jQuery.unique(ret);
                }

                // Reverse order for parents* and prev-derivatives
                if (rparentsprev.test(name)) {
                    ret = ret.reverse();
                }
            }

            return this.pushStack(ret);
        };
    });

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

关注
打赏
1665965058
查看更多评论
立即登录/注册

微信扫码登录

0.0398s