jQuery DOM节点的遍历方法小结


Posted in jQuery onAugust 15, 2017

本文介绍了jQuery DOM节点的遍历方法小结,分享给大家,也给自己留个笔记

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()方法是相似的

  • children只查找第一级的子节点
  • 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的对象

注意事项

  • 起始位置不同:.closest开始于当前元素 .parents开始于父元素
  • 遍历的目标不同:.closest要找到指定的目标,.parents遍历到文档根元素,closest向上查找,直到找到一个匹配的就停止查找,parents一直查找到根元素,并将匹配的元素加入集合
  • 结果不同:.closest返回的是包含零个或一个元素的jquery对象,parents返回的是包含零个或一个或多个元素的jquery对象

next()方法

jQuery是一个合集对象,如果想快速查找指定元素集合中每一个元素紧邻的后面同辈元素的元素集合,此时可以用next()方法

节点查找关系

//如下的class="item-2"就是class="item-1"的兄弟元素
<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-1"节点就是class="item-2"的li元素的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-1"和class="item-3"就是class="item-2"的siblings兄弟节点

<ul class="level-3">
  <li class="item-1">1</li>
  <li class="item-2">2</li>
  <li class="item-3">3</li>
</ul>

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>新的p元素</p>').appendTo(目标位置)

each()

jQuery是一个合集对象,通过$()方法找到指定的元素合集后可以进行一系列的操作

如操作$("li").css('') 给所有的li设置style值,因为jQuery是一个合集对象,所以css方法内部就必须封装一个遍历的方法,被称为隐式迭代的过程。要一个一个给合集中每一个li设置颜色,这里方法就是each

.each() 方法就是一个for循环的迭代器,它会迭代jQuery对象合集中的每一个DOM元素。每次回调函数执行时,会传递当前循环次数作为参数(从0开始计数)

三个重点

  • each是一个for循环的包装迭代器
  • each通过回调的方式处理,并且会有2个固定的实参,索引与元素
  • each回调方法中的this指向当前迭代的dom元素

实例:

<ul>
  <li>克利夫兰骑士</li>
  <li>LeBorn James</li>
</ul>
开始迭代li,循环2次
$("li").each(function(index, element) {
   index 索引 0,1
   element是对应的li节点 li,li
   this 指向的是li
})
<!DOCTYPE html>
<html>

<head>
  <meta http-equiv="Content-type" content="text/html; charset=utf-8" />
  <title></title>
  <style>
  .left {
    width: auto;
    height: 150px;
  }
  
  .left div {
    width: 150px;
    height: 120px;
    padding: 5px;
    margin: 5px;
    float: left;
    background: #bbffaa;
    border: 1px solid #ccc;
  }
  </style>
  <script src="http://libs.baidu.com/jquery/1.9.1/jquery.js"></script>
</head>

<body>
  <h2>each方法</h2>
  <div class="left first-div">
    <div class="div">
      <ul>
        <li>list item 1</li>
        <li>list item 2</li>
        <li>list item 3</li>
      </ul>
    </div>
    <div class="div">
      <ul>
        <li>list item 4</li>
        <li>list item 5</li>
        <li>list item 6</li>
      </ul>
    </div>
  </div>

  <br/>
  <button>点击:each方法遍历元素</button>
  <button>点击:each方法回调判断</button>
  <script type="text/javascript">
  $("button:first").click(function() {
    //遍历所有的li
    //修改每个li内的字体颜色
    $("li").each(function(index, element) {
      $(this).css('color','red')
    })

  })
  </script>
  <script type="text/javascript">
  $("button:last").click(function() {
    //遍历所有的li
    //修改偶数li内的字体颜色
    $("li").each(function(index, element) {
      if (index % 2) {
        $(this).css('color','blue')
      }
    })
  })
  </script>
</body>

</html>

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

jQuery 相关文章推荐
利用jQuery异步上传文件的插件用法详解
Jul 19 jQuery
浅谈事件冒泡、事件委托、jQuery元素节点操作、滚轮事件与函数节流
Jul 22 jQuery
jquery动态添加以及遍历option并获取特定样式名称的option方法
Jan 29 jQuery
jQuery中可见性过滤器简单用法示例
Mar 31 jQuery
jQuery简单实现的HTML页面文本框模糊匹配查询功能完整示例
May 09 jQuery
20个最常见的jQuery面试问题及答案
May 23 jQuery
jQuery选择器之层次选择器用法实例分析
Feb 19 jQuery
jQuery事件委托代码实践详解
Jun 21 jQuery
JQuery样式与属性设置方法分析
Dec 07 jQuery
jQuery表单校验插件validator使用方法详解
Feb 18 jQuery
如何解决jQuery 和其他JS库的冲突
Jun 22 jQuery
js和jquery判断数据类型的4种方法总结
Aug 28 jQuery
jQuery实现菜单栏导航效果
Aug 15 #jQuery
jQuery实现腾讯信用界面(自制刻度尺)样式
Aug 15 #jQuery
使用jQuery实现购物车结算功能
Aug 15 #jQuery
jQuery绑定事件方法及区别(bind,click,on,live,one)
Aug 14 #jQuery
jQuery选择器特殊字符与属性空格问题
Aug 14 #jQuery
jQuery实现手势解锁密码特效
Aug 14 #jQuery
jQuery 中msgTips 顶部弹窗效果实现代码
Aug 14 #jQuery
You might like
PHP默认安装产生系统漏洞
2006/10/09 PHP
php 无限级数据JSON格式及JS解析
2010/07/17 PHP
php无限遍历文件夹示例分享
2014/03/04 PHP
PHPExcel读取EXCEL中的图片并保存到本地的方法
2015/02/14 PHP
PHP检测一个数组有没有定义的方法步骤
2019/07/20 PHP
Yii框架小部件(Widgets)用法实例详解
2020/05/15 PHP
jMessageBox 基于jQuery的窗口插件
2009/12/09 Javascript
改变javascript函数内部this指针指向的三种方法
2010/04/23 Javascript
IE网页js语法错误2行字符1、FF中正常的解决方法
2013/09/09 Javascript
在JS中如何调用JSP中的变量
2014/01/22 Javascript
javascript操作select元素实例分析
2015/03/27 Javascript
简单学习JavaScript中的for语句循环结构
2015/11/10 Javascript
jQuery插件实现无缝滚动特效
2015/11/24 Javascript
Javascript数组Array基础介绍
2016/03/13 Javascript
详解Vue-Cli 异步加载数据的一些注意点
2017/08/12 Javascript
JS实现的简单折叠展开动画效果示例
2018/04/28 Javascript
利用原生的JavaScript实现简单拼图游戏
2018/11/18 Javascript
nodejs脚本centos开机启动实操方法
2020/03/04 NodeJs
[04:51]TI10典藏宝瓶Ⅱ外观视频展示
2020/08/15 DOTA
简单掌握Python的Collections模块中counter结构的用法
2016/07/07 Python
Python自定义类的数组排序实现代码
2016/08/28 Python
浅谈numpy数组的几种排序方式
2017/12/15 Python
python实现图像外边界跟踪操作
2020/07/13 Python
CSS3 clip-path 用法介绍详解
2018/03/01 HTML / CSS
Tuckernuck官网:经典的美国品质服装、鞋子和配饰
2021/01/11 全球购物
LINUX下线程,GDI类的解释
2016/12/14 面试题
四个太阳教学反思
2014/02/01 职场文书
市优秀教师事迹材料
2014/02/05 职场文书
党的群众路线教育实践活动心得体会900字
2014/03/07 职场文书
网络管理员岗位职责
2014/03/17 职场文书
公司爱心捐款倡议书
2014/05/14 职场文书
单身申明具结书
2015/02/26 职场文书
小学国庆节活动总结
2015/03/23 职场文书
2015年物流客服工作总结
2015/07/27 职场文书
浅谈如何写好演讲稿?
2019/06/12 职场文书
MongoDB balancer的使用详解
2021/04/30 MongoDB