DOM遍历查找结点

一、遍历API(2个)

  1.深度优先原则遍历NodeIterator 节点迭代器

  创建遍历API对象:

  var iterator=document.createNodeIterator(开始的父节点对象,whatToShow,null,false);

    whatToShow: NodeFilter.SHOW_ELEMENT(遍历元素节点)  NodeFilter.SHOW_ALL(遍历所有)

  用while循环,反复调用iterator.nextNode()方法

    只要nextNode(),就向下一个移动一次;iterator.previousNode(),后退一次

  示例:  

 1 function getChildren(parent){
 2     //1.创建NodeIterator对象
 3     var iterator=document.createNodeIterator(
 4         parent,
 5         NodeFilter.SHOW_ELEMENT,
 6         null,
 7         false
 8     );
 9     //2.使用while循环,调用iterator.nextNode()
10     //    每次调用返回下一个节点
11     //    直到返回null为止
12     var currNode=null;
13     var oldNode=null;
14     var n=0;
15     while ((currNode=iterator.nextNode())!=null)
16     {
17         oldNode=currNode;
18         while(oldNode!=parent){
19             oldNode=oldNode.parentNode;
20             blanks.push("\t");
21         }
22         console.log((n++)+blanks.join("")+"|-"+(currNode.nodeType!=3?currNode.nodeName:currNode.nodeVale));
23
24         blanks=[];
25     }
26 }

  2.自有遍历:TreeWalker

  (然并卵)

二、DOM查找(5个API)

  1.按id查找  var elem=document.getElementById("id值");//返回一个元素

  2.按标签名查找  var elems=parent.getElementsByTagName("标签名");//返回元素数组的动态集合

  3.按name属性查找(专门用于查找表单中的元素):  var elems=parent.getElementsByName("name属性值");//返回元素数组的动态集合

  4.按className属性查找  var elems=parent.getElementsByClassName("类名");////返回元素数组

  5.通过CSS选择器选取元素 Selector API(jQuery的核心)(只能从父节点向下找)

    var elem=parent.querySelector("选择器");

    var elems=parent.querySelectorAll("选择器");

    特点: 内置API,执行效率高; elems:包含完整对象属性的集合,不会反复查找.

  示例:购物车商品数量加减,小计和总价的计算  

 1 <!DOCTYPE HTML>
 2 <html>
 3 <head>
 4 <title>实现购物车客户端计算</title>
 5 <meta charset="utf-8" />
 6 <style>
 7     table{width:600px; text-align:center;
 8         border-collapse:collapse;
 9     }
10     td,th{border:1px solid black}
11     td[colspan="3"]{text-align:right;}
12 </style>
13 <script src="js/7_2.js"></script>
14 </head>
15 <body>
16     <table id="data">
17         <thead>
18             <tr>
19                 <th>商品名称</th>
20                 <th>单价</th>
21                 <th>数量</th>
22                 <th>小计</th>
23             </tr>
24         </thead>
25         <tbody>
26             <tr>
27                 <td>iPhone6</td>
28                 <td>&yen;4488</td>
29 <td>
30     <button onclick="calc(this)">-</button>
31     <span>1</span>
32     <button onclick="calc(this)">+</button>
33 </td>
34                 <td>&yen;4488</td>
35             </tr>
36             <tr>
37                 <td>iPhone6 plus</td>
38                 <td>&yen;5288</td>
39                 <td>
40                 <button onclick="calc(this)">-</button>
41                 <span>1</span>
42                 <button onclick="calc(this)">+</button>
43                 </td>
44                 <td>&yen;5288</td>
45             </tr>
46             <tr>
47                 <td>iPad Air 2</td>
48                 <td>&yen;4288</td>
49 <td>
50     <button onclick="calc(this)">-</button>
51     <span>1</span>
52     <button onclick="calc(this)">+</button>
53 </td>
54                 <td>&yen;4288</td>
55             </tr>
56         </tbody>
57         <tfoot>
58             <tr>
59                 <td colspan="3">Total: </td>
60                 <td>&yen;14064</td>
61             </tr>
62         </tfoot>
63     </table>
64 </body>
65 </html>

 1 function calc(btn){
 2     /*修改数量*/
 3     //向上查找
 4     var td=btn.parentNode;
 5     //找当前td下的span元素
 6     var span=td.querySelector("span");
 7     //取出span中的数量n
 8     var n=parseInt(span.innerHTML);
 9     //如果btn是+
10     btn.innerHTML=="+"?n++:n--;
11     n==0&&(n=1);
12     span.innerHTML=n;
13
14     //计算小计
15     //获得price 单价
16     var tr=td.parentNode;
17     var tdPrice=tr.querySelector("td:nth-child(2)");
18     var price=parseFloat(tdPrice.innerHTML.slice(1));
19
20     tr.querySelector("td:last-child").innerHTML="&yen;"+(price*n).toFixed(2);
21
22     /*计算总计*/
23     //获得table中tbody下,作为tr下最后一个子元素的td
24     //保存在subs中
25     //遍历subs中的每个td,total变量用于保存累加值
26     //
27     var table=document.querySelector("#data");
28     var subs=table.tBodies[0].querySelectorAll("tr td:last-child");
29     var total=0;
30     for (var i=0;i<subs.length;i++)
31     {
32         console.log(subs[i].innerHTML);
33         total=total+(parseFloat(subs[i].innerHTML.slice(1)));
34     }
35     table.tFoot.querySelector("td:last-child").innerHTML="&yen;"+total.toFixed(2);
36
37 }

三、其他选择器

  1.document.head HTML文档中<head>元素的引用

  2.document.body HTML文档中<body>元素的引用

  3.document.documentElement HTML文档中<html>元素的引用

时间: 2024-10-27 19:56:06

DOM遍历查找结点的相关文章

头插法链表的基本操作:创建空链表,插入结点,遍历链表,求链表长度,查找结点,删除结点

1 #include <stdio.h> 2 #include <stdlib.h> 3 /* 4 头插法链表的基本操作:创建空链表,插入节点,遍历输出节点数据,求链表长度,查找结点,删除结点. 5 */ 6 typedef struct node 7 { 8 int data; 9 struct node * next; 10 }NODE; 11 //创建空链表 12 NODE * createList() 13 { 14 NODE * head = (NODE *)malloc

JavaScript框架探索4——DOM遍历2

接着上篇的话题继续,原生的js中有两种循环,分别是普通的for循环和for in循环,不管是哪种循环我们使用它们的时候经常有的一个操作就是循环遍历某一项,然后执行很多动作,在这些动作中如果遇到上篇中的给某个对象添加方法(或事件,事实上事件就是特殊的方法)的时候就会引起共享外部作用域的问题: var arr = [1, 2, 3]; var obj = {}; for(var i = 0; i < arr.length; i++){ aDiv[i].onclick = function(){ co

DOM——遍历.parent()、.parents()、.closest()和.next()

遍历.parent()..parents()..closest()和.next() 1   .parent()快速查找合集里面的每一个元素的父元素,即父亲与儿子的关系,因为是父元素,所以只会向上查找一级 2   .parent()无参数,能够在DOM树中搜索到这些元素的父级元素,有序的向上匹配元素,并根据匹配的元素创建一个新的JQuery对象 3   .parent()选择性地接受同一型选择器表达式,需要对这个合集对象进行一定的筛选,找出目标元素,允许传一个选择器的表达式 4   .parent

DOM遍历方法(基于jQuery)

在使用$()创建了jQuery对象之后,通过调用下列DOM遍历方法,可以修改其中匹配的元素,以便将来操作. 筛选元素 .filter(selector)                              与给定的选择符selector匹配的选中元素 .filter(callback)                              回调函数callback返回true的选中元素 .eq(index)                                     从0开

jQuery 源码分析(十九) DOM遍历模块详解

jQuery的DOM遍历模块对DOM模型的原生属性parentNode.childNodes.firstChild.lastChild.previousSibling.nextSibling进行了封装和扩展,用于在DOM树中遍历父元素.子元素和兄弟元素. 可以通过jQuery的实例来访问,方法如下: parent()             ;获取匹配元素的父元素 parents(selector)         ;获取匹配元素的所有祖先元素                        ;s

DOM遍历

前面的话 DOM遍历模块定义了用于辅助完成顺序遍历DOM结构的类型:Nodeiterator和TreeWalker,它们能够基于给定的起点对DOM结构执行深度优先(depth-first)的遍历操作.本文将详细介绍DOM遍历 [注意]IE8-浏览器不支持 定义 DOM遍历是深度优先的DOM结构遍历,遍历以给定节点为根,不可能向上超出DOM树的根节点.以下面的HTML页面为例 <!DOCTYPE html> <html> <head> <title>Examp

玩转DOM遍历——用NodeIterator实现getElementById,getElementsByTagName方法

先声明一下DOM2中NodeIterator和TreeWalker这两类型真的只是用来玩玩的,因为性能不行遍历起来超级慢,在JS中基本用不到它们,除了<高程>上有两三页对它的讲解外,谷歌的学习资料也是甚少(倒是有挺多国外文章)...由于本着不放过任何知识的态度,结合着自己的理解学习了下这两玩意,你们对这两东西了解了解就好~ DOM2级遍历和范围模块定义了两个用于完成顺序遍历DOM结构的类型:NodeIterator和TreeWalker.这两类型基于给定起点对DOM结构执行深度优先先序遍历,兼

遍历查找问题的应用场景

查找问题是指在一个样本范围内,是否存在需要的数据. 在学习开发的过程中,我们经常遇到该类型的问题,学习遍历-查找问题,将有助于我们快速分析问题,给出解题思维流程图. 1.查找判断问题 单纯的查找问题,是用来判断给出的数据类型里面是否存在有我们想查找的数据,而不关心这些数据是什么.在解决该类问题的时候,往往用到以下方案: 第一步:定义一个bool变量isFind,表示是否找到,由于一开始还没有开始查找,自然没有找到,所以变量isFind的值应该为false. bool isFind=false;

jQuery DOM操作之结点转移复制

jQuery DOM操作之结点转移复制 $('div').append($('p'))这样即可把p标签移动到div标签里 $('div').append( $('p').html() )是把p标签里的内容复制到div标签里 $('div').append( $('p').clone(true))是复制一份到div标签里,原来的标签还保留着 $(function(){ $(".nm_ul li").click(function(){ //当clone参数设置为true时还可以将按钮上绑定