• 2019.8.13节点的选取


    节点类型

    // DOM: 核心DOM 能够操作所有结构化文档 (HTML,XML) 万能 复杂 繁琐
    // HTML DOM 专门操作HTML内容的API 常用的API进行简化 -- 简单 不是万能
    // 实际开发中:先用简单,如果简单的不能解决问题、实现不了在用核心DOM补充
    // 网页中一切在内存中都是以树形结构存储的 存储上下级包含关系最直观的结构
    // HTML中的每一个元素:元素,属性,文本 都是一个节点对象(Node) document对象是整棵树的根节点

    // 节点对象(Node) 三大属性:
    // 1.nodeType number
    专门区分节点的类型:
    9 document
    1 element
    2 attribute
    3 text
    需要区分节点类型的时候使用
    // 2.nodeName 节点名 字符串
    document #document
    element 全大写的标签名
    attribute 属性名
    文本节点 #text
    进一步区分元素的名称时使用
    // 3.nodeValue 节点值
    document null
    element null
    attribute 属性值
    text 文本的内容
    DOM操作 --->对DOM树的内容做 增 删 改 查

    节点查找

    1.三个元素不需要找,直接获得:
    <html> document.documentElement
    <head> document.head
    <body> document.body
    2.节点之间的关系:
    1)父子关系
    node.parentNode 获得node的父节点
    node.childNodes 获得node的所有子节点
    node.firstChild 获得node下的第一个子节点
    node.lastChild 后的node下最后一个子节点
    2)兄弟关系
    node.preivousSibling: 返回当前节点的前一个兄弟节点
    node.nextSibling:返回当前节点的下一个兄弟节点
    问题:网页中的一切都是节点,包括换行和空字符

    用元素树:仅包含元素节点的树结构 ---不是一颗新树 ,仅是节点数的子集
    1)父子关系
    elem.parentElement 返回一个父元素对象
    elem.childen IE8支持 返回子元素对象集合
    elem.firstElementChild 返回第一个子元素对象
    elem.lastElementChild 返回最后一个子元素
    2)兄弟关系
    返回当前节点的前一个兄弟元素
    elem.preivousElementSibling
    返回当前节点的下一个兄弟元素
    elem.nextElementSibling

    eg:

    <body>
    <div id="box">1
    <a href="#">1</a>
    <a href="#">2</a>
    <a href="#">3</a>
    <a href="#">4</a>
    </div>
    <div>2</div>
    <a href="#">aaa</a>
    <span></span>
    <ul id="nav">
    <li>aa</li>
    <li class="active">bb
    <ul>
    <li>b1</li>
    <li class="active sub">b2</li>
    <li>b3</li>
    </ul>
    </li>
    <li>cc</li>
    </ul>
    <form action="#" id="form1">
    <input type="text" name="username" placeholder="请输入用户名" id="username">
    <input type="checkbox" name="sex">男
    <input type="checkbox" name="sex">女
    </form>
    <script>
    // 按照HTML查找 在整个页面或者父元素下,查找属性或标签符合条件的元素对象
    // 4种
    // 1.id 只能用document调用 仅返回一个元素
    var div = document.getElementById("box");
    console.log(div);
    // 2.tagName 查找指定父元素下的指定标签元素 任何父元素都可以调用
    // 返回值哪怕只有哦一个,也放在集合中 没有找到符合要求的子节点 返回一个空数组
    // 查找不仅只查直接子节点,而且查找所有子代节点
    var divs = document.getElementsByTagName("div");
    var aLinks = div.getElementsByTagName("a");
    console.log(document.getElementsByTagName("span"));
    console.log(document.getElementsByTagName("p"));
    //3.name属性查找 查找表单 只能用document调用 返回:动态数组
    // var form1 = document.getElementById("form1");
    var chks = document.getElementsByName("sex");
    //4.按class属性查找 只能通过任意父元素上调用 查找的子代 只要标签中class属性值符合要求的就被选中
    var lis = nav.getElementsByClassName("active");

    作业:

    <body>
    <table width="500px" border="1" cellspacing="0" align="center">
    <thead>
    <th>商品名称</th>
    <th>单价</th>
    <th>数量</th>
    <th>小计</th>
    </thead>
    <tbody>
    <tr>
    <td>商品1</td>
    <td>¥1000</td>
    <td>
    <button>&lt;</button>
    <span>1</span>
    <button>&gt;</button>
    </td>
    <td>
    ¥1000
    </td>
    </tr>
    <tr>
    <td>商品2</td>
    <td>¥600</td>
    <td>
    <button>&lt;</button>
    <span>1</span>
    <button>&gt;</button>
    </td>
    <td>
    ¥600
    </td>
    </tr>
    <tr>
    <td>商品3</td>
    <td>¥12000</td>
    <td>
    <button>&lt;</button>
    <span>1</span>
    <button>&gt;</button>
    </td>
    <td>
    ¥12000
    </td>
    </tr>
    </tbody>
    <tfoot>
    <tr>
    <td colspan="3" align="right">Total:</td>
    <td>
    ¥13600
    </td>
    </tr>
    </tfoot>
    </table>
    <!--
    要求:1、标签的结构不能发生变化 其中包括id和class
    元素集合.onclick = 函数名 使用this关键字在函数中得到当前元素
    2、可以切换数量 数量最大不限制,最小不能小于0
    3、数量有变化的时候,小计和Total的值随之变化
    -->

    js页面

    //找到所要选用的table标签
    //通过标签找到要获取的按钮
    var btns = document.getElementsByTagName('button');
    //遍历btns中的每个btn
    for(var i = 0;i < btns.length;i++){
    //给单击事件赋个值方便后面使用
    btns[i].onclick = calc;
    }
    //响应单击事件
    function calc(){
    //找到span标签,通过先过去父元素节点,再找子代的span,这样快速一些,this指btns[i]
    var span = this.parentNode.getElementsByTagName('span')[0];
    //span.innerHTML是个字符串,改成数字方便计算,把内容给n作计算
    var n = parseInt(span.innerHTML);
    //如果btn[i]里面是大于号,那么就作n++,否则,就是n--,不过n=0时,就不减了
    this.innerHTML == '&gt;'? n++: n > 0? n--: n == 0;
    //把修改之后的内容给到页面中
    span.innerHTML = n;
    //小计的变化,先获取单价
    var price = parseInt(this.parentNode.previousElementSibling.innerHTML.slice(1));
    //把单价*数量的数字放入小计中,并呈现
    this.parentNode.nextElementSibling.innerHTML = ('¥' + price*n);
    //获取三个小计的标签
    var tds = document.querySelectorAll('table>tbody td:last-child');
    // 遍历小计,将总和给总计,先要定义一个sum接受
    for(var i = 0,sum = 0;i < tds.length;i++){
    sum += parseInt(tds[i].innerText.slice(1));
    }
    //获取总计的标签
    var td = document.querySelector('table>tfoot td:last-child');
    //将总计写入td中,并呈现
    td.innerHTML = '¥' + sum;
    }

  • 相关阅读:
    精简shell基础
    Centos7.4下安装Jumpserver 1.0.0(支持windows组件)
    二.Flask 学习模板
    一、Flask路由介绍
    web爬虫,BeautifulSoup
    web爬虫,requests请求
    django之Form组件补充
    中间件和Django缓存
    django之Form组件
    django from表单验证
  • 原文地址:https://www.cnblogs.com/awei313558147/p/11377334.html
Copyright © 2020-2023  润新知