zoukankan      html  css  js  c++  java
  • 操作DOM元素

    一、获取DOM元素
    document.getElementById() 获取标签在的ID
    document.getElementsByTayName() 获取标签名
    document.getElementdByClassName()获取标签类名
    document.getElementsByName() 根据标签的属性值获取一组节点对象。返回一个伪数组
    document.querySelector()[0] 根据选择器获取【单个节点对象】。返回一个节点对象(id记得加 #    类名加 .)
    document.querySelectorAll() 根据标签的name值获取【一组节点对象】。返回一个伪数组
     
    二、根据节点之间关系获取节点
     元素节点.offsetParent 返回最近的 定位父元素
    获取父节点
    元素节点.parentNode作用:获取一个节点的父节点
    获取子节点
    节点.childNodes 获取一个节点的所有子节点(包括文本节点和元素节点),返回一个有序的集合  [在 IE7 一下不会获取文本节点]
    节点.children 获取一个节点的所有子节点(仅仅是元素节点)
    获取第一个节点
    父节点.firstChild 获取第一个子节点对象,包含空白(空格)文本节点对象
    父节点.firstElementChild 获取第一个元素子节点对象 有兼容问题(IE9以下)
    获取最后一个子节点
    父节点.lastChild 获取最后一个子节点对象,包含空白文本(空格)节点对象
    父节点.lastElementChild 获取最后一个元素子节点对象,有兼容问题IE9以下
    获取上一个兄弟节点
    节点.previousSibling; 获取上一个同级的节点,包含空白文本节点对象
    节点.previousElementSibling; 获取上一个同级的元素节点,有兼容问题IE9以下
    获取下一个
    节点.nextSibling;获取下一个同级的节点,包含空白文本(空格)节点对象
    节点.nextElementSibling; 获取下一个同级的元素节点,有兼容问题IE9以下
     
    三、创建节点
    document.write('内容') 缺点会覆盖整个页面 一般不用
    document.write('<h2>我是标题</h2>');
    元素.innerHTML ='内容'优点:对于添加多个嵌套的内容操作方便。缺点:会覆盖部分网页元素以及事件
    <ul id="list"></ul>
    // 获取ul
    var ul = document.getElementById('list');
    // 给ul中添加也新的li元素
    ul.innerHTML = ul.innerHTML  + '<li><a href="#">我是新的li</a></li>';
     
    document.createElement('标签名') 优点:不会覆盖原有的元素的事件。缺点:对于添加嵌套多的内容操作麻烦。(只是标签名字不用加<> 如加 <div>标签 直接写成document.createElement(‘div’) 就可以 )
    // 创建一个新的li元素节点
    var li = document.createElement('li');
    // 把新的li追加到ul最后面
    ul.appendChild(li)
    创建元素性能问题 【了解】
    innerHTML 会产生字符串解析,由于字符串的不可变性,尽量避免大量的拼接,否则消耗内存,影响性能。
    document.createElement('标签')创建的性能要比innerHTML要高,但是若涉及到多层嵌套内容时,代码操作麻烦。
    所以,一般情况下,两者配合使用较多
     
    添加元素
    父节点.appendChild(新的子节点);作用:向父节点最后追加新的节点
    父节点.insertBefore(新的节点,旧的子节点) 将一个新的节点插入到父节点中的某个子节点的前面
     
    删除元素
    父节点.removeChild(子节点) 作用:删除父元素中的指定的子节点
     
    替换元素
    父节点.replaceChild(新的节点,旧的子节点) 作用:替换子节点
     
    克隆元素
    要克隆的元素.cloneNode(true) 
    cloneNode() 方法创建指定节点的副本。
    cloneNode() 方法有一个参数(true 或 false)。该参数指示被复制的节点是否包括原节点的所有属性和子节点
        var box = document.getElementsByClassName('box')[0]
        var box1 = box.cloneNode(true)
        document.querySelector('body').appendChild(box1)
     
    操作元素
    元素.innerHTML = '可以填写内容和标签';
    元素.className = 类名; 添加或删除类名
    元素.innerText='只可以填写内容'; 添加标签会被一起打印到页面
    元素.textContent = '只可以填写内容'; 添加标签会被一起打印到页面
    innerText和textContent
    谷歌两个都支持
    新版的火狐也是两个都支持  旧版的火狐只支持 textContent
    新版的IE 俩个都支持  旧版的IE 只支持innerText
     
    操作表单属性
    元素.value 获取文本框的内容(所有表单都可以用)
    元素.value =' '  设置文本框的内容 
    元素.cheked 操作表单元素 是否选中【针对 单选框 和 多选框 选择=true】
    元素.disabled 操作表单元素是否禁止(针对按钮 禁用=true)
    元素.selected 操作下拉框选项是否选中【针对下拉框】
    元素.readOnly 操作表单元素是否只读【针对文本框】
     
    什么是自定义属性
    针对html标签的属性可以分为两类:
    标签自带属性(语言设计者提供的属性)id、title、src、href、name、type等
    自定义标签属性用户根据需求,自己给标签添加的自己定义的标签属性
    操作方式
    获取节点对象.getAttribute('属性名'); // 会返回标签的属性的值
    设置节点对象.setAttribute('属性名','值'); // 会修改或添加标签属性
    删除节点对象.removeAttribute('属性名'); // 会删除标签的属性
     document.createAttribute() (创建属性)
    var atr=document.createAttribute("class");
    atr.nodeValue="democlass";
    document.getElementsByTagName("H1")[0].setAttributeNode(atr);
    节点.setAttributeNode() 方法用于创建一个指定名称的属性
     element.attributes(将属性生成数组对象)
    注意:自定义标签属性的操作只能够通过元素的getAtrribute、setAttribute、removeAttribute提供的方法操作。 不能直接通过元素点的方式直接获取或设置
     
    获取元素的大小
    元素.clientWidth和 元素.clientHeight
    获取元素的宽度 和 高度,返回数字,不含单位。
    元素的宽度:width + padding(左右) ;
    元素的高度: height + padding(上下)
     
     
    获取元素的位置
    元素.offsetLeft 和offsetTop
    获取元素的坐标,获取当前节点对象的padding的外边界,距离border外边界的距离。实际上就是左边框的厚度
    offsetWidth: 为元素的width+元素的padding+边框的宽度
    以offsetLeft为例进行说明,在不同的浏览器中其值不同,且与父元素的position属性(relative,absolute,fixed)有关。现分以下几种情况说明:(测试所用的浏览器版本为:Chrome 68.0.3440.106, opera54.0, Firefox61.0.1和IE11.0)
    2.1在父元素均不设置position属性时,在Chrome,opera和IE浏览器中offsetLeft是元素边框外侧到浏览器窗口内侧的距离且body.offsetLeft=0,
     
     在firefox浏览器中offsetLeft是元素边框外侧到body内侧的距离body.offsetLeft=-边框宽度
    如图:
    2.2当父元素设置position元素时又分为两种情况,
    2.2.1如果父元素时body且body设置了position属性,在Chrome和opera浏览器中offsetLeft是元素边框外侧到body边框外侧的距离,
     
     在IE和fireForx浏览器中offsetLeft是元素边框外侧到body边框内侧的距离
     
     
    图解client系列属性
    获取元素的大小
    在使用scroll系列的时候,一般页面的结果是①大容器套小容器②大容器相对定位或者绝对定位,小容器绝对定位③小容器位置变化④在大容器中注册scroll事件⑤在滚动的时候scroll事件在触发,然后利用scrollTop即可看到滚出去的距离,得到的结果是数字
     
    语法
    元素.scrollWidth 和 元素.scrollHieght
    获取当前节点对象的宽度和高度,返回数字,不包含单位。
    宽度:width+padding(左右)+ 溢出部分
    高度:height+padding(上下)+ 溢出部分
     
     
    获取元素中被卷去的距离
    元素.scrollLeft 和 元素.scrollTop
    作用:获取元素内部总被卷去的内容的横向距离 和 纵向距离 !
     
     
     
    获取可视区域的宽度和高度 innerWidth 和 innerHeight 属性
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
     
    DOM
  • 相关阅读:
    返回值与返回引用的问题
    C内存之指针传递
    Elasticsearch-Java中文搜索器(下)
    Elasticsearch-Java中文搜索器(中)
    Elasticsearch-Java中文搜索器(上)
    Redis和Memcache对比及选择
    Java + Tomcat + Memcached + Nginx 实现负载均衡~下
    Java + Tomcat + Memcached + Ecs 实现负载均衡~上
    Java -- 偏向锁、轻量级锁、自旋锁、重量级锁
    Java 锁与对象头
  • 原文地址:https://www.cnblogs.com/maxiag/p/13586598.html
Copyright © 2011-2022 走看看