[jQuery教程]jQuery的遍历方法(八)
children()方法
jQuery 是一个合集对象,如果想快速查找合集里面的第一级子元素,此时可以用 children()方法。这里需要注意:.children(selector) 方法是返回匹配元素集合中每个元素的所有子元素(仅儿子辈,这里可以理解为就是父亲-儿子的关系)。
理解节点查找关系:
<div class="div"> <ul class="son"> <li class="grandson">1</li> </ul> </div>
代码如果是$(“div”).children(),那么意味着只能找到 ul,因为 div 与 ul 是父子关系,li 与 div 是祖辈关系,因此无法找到。
children()无参数
允许我们通过在 DOM 树中对这些元素的直接子元素进行搜索,并且构造一个新的匹配元素的 jQuery 对象。
注意:jQuery 是一个合集对象,所以通过 children 是匹配合集中每一给元素的第一级子元素
.children()方法选择性地接受同一类型选择器表达式
$("div").children(".selected")
同样的也是因为 jQuery 是合集对象,可能需要对这个合集对象进行一定的筛选,找出目标元素,所以允许传一个选择器的表达式。
find()方法
jQuery 是一个合集对象,如果想快速查找 DOM 树中的这些元素的后代元素,此时可以用 find()方法,这也是开发使用频率很高的方法。这里要注意 children 与 find 方法的区别,children 是父子关系查找,find 是后代关系(包含父子关系)
理解节点查找关系:
<div class="div"> <ul class="son"> <li class="grandson">1</li> </ul> </div>
代码如果是$(“div”).find(“li”),此时,li 与 div 是祖辈关系,通过 find 方法就可以快速的查找到了。
.find()方法要注意的知识点:
- find 是遍历当前元素集合中每个元素的后代。只要符合,不管是儿子辈,孙子辈都可以。
- 与其他的树遍历方法不同,选择器表达式对于 .find() 是必需的参数。如果我们需要实现对所有后代元素的取回,可以传递通配选择器 ‘*’。
- find 只在后代中遍历,不包括自己。
- 选择器 context 是由 .find() 方法实现的;因此,$(‘.item-ii’).find(‘li’) 等价于 $(‘li’, ‘.item-ii’)(找到类名为 item-ii 的标签下的 li 标签)。
注意重点:
.find()和.children()方法是相似的
1.children 只查找第一级的子节点
2.find 查找范围包括子节点的所有后代节点
parent()方法
jQuery 是一个合集对象,如果想快速查找合集里面的每一个元素的父元素(这里可以理解为就是父亲-儿子的关系),此时可以用 parent()方法
因为是父元素,这个方法只会向上查找一级
理解节点查找关系:
<div class="div"> <ul class="son"> <li class="grandson">1</li> </ul> </div>
查找 ul 的父元素 div, $(ul).parent(),就是这样简单的表达
parent()无参数
parent()方法允许我们能够在 DOM 树中搜索到这些元素的父级元素,从有序的向上匹配元素,并根据匹配的元素创建一个新的 jQuery 对象。
注意:jQuery 是一个合集对象,所以通过 parent 是匹配合集中每一个元素的父元素。
parent()方法选择性地接受同一型选择器表达式
同样的也是因为 jQuery 是合集对象,可能需要对这个合集对象进行一定的筛选,找出目标元素,所以允许传一个选择器的表达式。
parents()方法
jQuery 是一个合集对象,如果想快速查找合集里面的每一个元素的所有祖辈元素,此时可以用 parents()方法。
其实也类似 find 与 children 的区别,parent 只会查找一级,parents 则会往上一直查到查找到祖先节点。
理解节点查找关系:
<div class="div"> <ul class="son"> <li class="grandson">1</li> </ul> </div>
在 li 节点上找到祖 辈元素 div, 这里可以用$(“li”).parents()方法
parents()无参数
parents()方法允许我们能够在 DOM 树中搜索到这些元素的祖先元素,从有序的向上匹配元素,并根据匹配的元素创建一个新的 jQuery 对象;
返回的元素秩序是从离他们最近的父级元素开始的。
注意:jQuery 是一个合集对象,所以通过 parent 是匹配合集中所有元素的祖辈元素
parents()方法选择性地接受同一型选择器表达式
同样的也是因为 jQuery 是合集对象,可能需要对这个合集对象进行一定的筛选,找出目标元素,所以允许传一个选择器的表达式
注意事项:
1、 .parents()和.parent()方法是相似的,但后者只是进行了一个单级的 DOM 树查找
2、 $( “html” ).parent()方法返回一个包含 document 的集合,而$( “html” ).parents()返回一个空集合。
closest()方法
以选定的元素为中心,往内查找可以通过 find、children 方法。如果往上查找,也就是查找当前元素的父辈祖辈元素,jQuery 提供了 closest()方法,这个方法类似 parents 但是又有一些细微的区别,属于使用频率很高的方法
closest()方法接受一个匹配元素的选择器字符串
从元素本身开始,在 DOM 树上逐级向上级元素匹配,并返回最先匹配的祖先元素
例如:在 div 元素中,往上查找所有的 li 元素,可以这样表达
$("div").closet("li')
注意:jQuery 是一个合集对象,所以通过 closest 是匹配合集中每一个元素的祖先元素
closest()方法给定的 jQuery 集合或元素来过滤元素
同样的也是因为 jQuery 是合集对象,可能需要对这个合集对象进行一定的筛选,找出目标元素,所以允许传一个 jQuery 的对象
注意事项:在使用的时候需要特别注意下
粗看.parents()和.closest()是有点相似的,都是往上遍历祖辈元素,但是两者还是有区别的,否则就没有存在的意义了。
- 起始位置不同:.closest 开始于当前元素 .parents 开始于父元素
- 遍历的目标不同:.closest 要找到指定的目标,.parents 遍历到文档根元素,closest 向上查找,直到找到一个匹配的就停止查找,parents 一直查找到根元素,并将匹配的元素加入集合
- 结果不同:.closest 返回的是包含零个或一个元素的 jquery 对象,parents 返回的是包含零个或一个或多个元素的 jquery 对象
next()方法
jQuery 是一个合集对象,如果想快速查找指定元素集合中每一个元素紧邻的后面同辈元素的元素集合,此时可以用 next()方法
理解节点查找关系:
如下 class=”item-1″元素,那 class=”item-2″就是它的兄弟元素。
<ul class="level-3"> <li class="item-1">1</li> <li class="item-2">2</li> <li class="item-3">3</li> </ul>
next()无参数
允许我们找遍元素集合中紧跟着这些元素的直接兄弟元素,并根据匹配的元素创建一个新的 jQuery 对象。
注意:jQuery 是一个合集对象,所以通过 next 匹配合集中每一个元素的下一个兄弟元素
next()方法选择性地接受同一类型选择器表达式
同样的也是因为 jQuery 是合集对象,可能需要对这个合集对象进行一定的筛选,找出目标元素,所以允许传一个选择器的表达式。
prev()方法
jQuery 是一个合集对象,如果想快速查找指定元素集合中每一个元素紧邻的前面同辈元素的元素集合,此时可以用 prev()方法
理解节点查找关系:
如下 class=”item-2″的 li 元素,class=”item-1″的节点就是它的 prev 兄弟节点。
<ul class="level-3"> <li class="item-1">1</li> <li class="item-2">2</li> <li class="item-3">3</li> </ul>
prev()无参数
取得一个包含匹配的元素集合中每一个元素紧邻的前一个同辈元素的元素集合。
注意:jQuery 是一个合集对象,所以通过 prev 是匹配合集中每一个元素的上一个兄弟元素
prev()方法选择性地接受同一类型选择器表达式
同样的也是因为 jQuery 是合集对象,可能需要对这个合集对象进行一定的筛选,找出目标元素,所以允许传一个选择器的表达式
siblings()方法
jQuery 是一个合集对象,如果想快速查找指定元素集合中每一个元素的同辈元素,此时可以用 siblings()方法
理解节点查找关系:
如下 class=”item-2″的 li 元素,那么 class=”item-1″与 class=”item-3″就是它的 siblings 兄弟节点.
siblings()无参数
取得一个包含匹配的元素集合中每一个元素的同辈元素的元素集合
注意:jQuery 是一个合集对象,所以通过 siblings 是匹配合集中每一个元素的同辈元素
siblings()方法选择性地接受同一类型选择器表达式
同样的也是因为 jQuery 是合集对象,可能需要对这个合集对象进行一定的筛选,找出目标元素,所以允许传一个选择器的表达式
add()方法
jQuery 是一个合集对象,通过$()方法找到指定的元素合集后可以进行一系列的操作。$()之后就意味着这个合集对象已经是确定的,如果后期需要再往这个合集中添加一新的元素要如何处理?jQuery 为此提供 add 方法,用来创建一个新的 jQuery 对象 ,元素添加到匹配的元素集合中。
.add()的参数可以几乎接受任何的$(),包括一个 jQuery 选择器表达式,DOM 元素,或 HTML 片段引用。
简单的看一个案例:
操作:选择所有的 li 元素,之后把 p 元素也加入到 li 的合集中。
<ul> <li>list item 1</li> <li>list item 3</li> </ul> <p>新的 p 元素</p>
处理一:传递选择器
$('li').add('p')
处理二:传递 dom 元素
$('li').add(document.getElementsByTagName('p')[0])
还有一种方式,就是动态创建 P 标签加入到合集,然后插入到指定的位置,但是这样就改变元素的本身的排列了。
$('li').add('新的 p 元素
').appendTo(目标位置)
each()方法
jQuery 是一个合集对象,通过$()方法找到指定的元素合集后可以进行一系列的操作。比如我们操作$(“li”).css(”) 给所有的 li 设置 style 值,因为 jQuery 是一个合集对象,所以 css 方法内部就必须封装一个遍历的方法,被称为隐式迭代的过程。要一个一个给合集中每一个 li 设置颜色,这里方法就是 each
.each() 方法就是一个 for 循环的迭代器,它会迭代 jQuery 对象合集中的每一个 DOM 元素。每次回调函数执行时,会传递当前循环次数作为参数(从 0 开始计数
所以大体上了解 3 个重点:
each 是一个 for 循环的包装迭代器
each 通过回调的方式处理,并且会有 2 个固定的实参,索引与元素
each 回调方法中的 this 指向当前迭代的 dom 元素
看一个简单的案例
<ul> <li>码云笔记</li> <li>Aaron</li> </ul>
开始迭代 li,循环 2 次
$("li").each(function(index, element) { index 索引 0,1 element 是对应的 li 节点 li,li this 指向的是 li })
这样可以在循环体会做一些逻辑操作了,如果需要提前退出,可以以通过返回 false 以便在回调函数内中止循环。
码云笔记 » [jQuery教程]jQuery的遍历方法(八)