zoukankan      html  css  js  c++  java
  • [记录] JavaScript 中的DOM操作

    DOM:Document Object Model 文档对象模型
    DOM对象操作
    document代表整个文档

    一、获取DOM元素节点
    1. 通过ID获取元素: 选取一个元素,所有浏览器都兼容

    document.getElementById('ID名称'); 
    示例: 
    var oDiv = document.getElementById('demo');
    console.log(oDiv);
    打印结果为:<div id="deom">...</div>
    

    2. 通过标签名获取元素节点: 选取一组元素,结果是一个类数组

    elem.getElementsByTagName('标签名');
    示例:
    var oLi = oDiv.getElementsByTagName('li');
    console.log(oLi);
    打印结果为:[li,li,...,li]
    

    3. 通过class名获取元素节点: 选取一组元素。IE9以下版本不支持

    elem.getElementsByClassName('class名');
    

    4. 通过标签属性name获取元素节点: 获取一组元素,IE10以下只有部分标签name可生效(表单、img、iframe)

    elem.getElementsByName('标签name的值');
    

    5. 通过css选择器获取第一个元素: IE8以下浏览器不支持

    elem.querySelector('css选择器匹配规则');
    匹配指定选择器的第一个元素。
    

    6. 通过css选择器获取所有匹配元素: IE8以下浏览器不支持

    elem.querySelectorAll('css选择器匹配规则');
    匹配指定选择器的集合
    注意:
    querySelector()和querySelectorAll() 方法获取的是元素节点的复本
    

    二、遍历节点树
    节点类型:

    元素节点  => nodeType == 1
    属性节点  => nodeType == 2
    文本节点  => nodeType == 3
    注释节点  => nodeType == 8
    document => nodeType == 9
    

    节点的四个属性:

    nodeName : 元素的标签名, 以大写形式表示, 只读
    nodeValue : Text文本节点或Comment注释节点的文本内容,可读写
    nodeType : 该节点的类型,只读
    attributes : 元素节点的属性集合
    

    判断一个元素下是否包含子节点: elem.hasChildNodes();

    父节点 (最顶层的parentNode为#document);
    elem.parentNode // 获取elem的父节点
    
    子节点们
    elem.childNodes // 获取elem的第一层所有子节点
    
    第一个子节点
    elem.firstChild
    
    最后一个子节点
    elem.lastChild
    
    兄弟节点
    elem.nextSibling  // 后一个兄弟节点
    elem.previousSibling // 前一个兄弟节点
    
    offsetParent : 获取元素有定位的父级元素
    

    三、基于元素节点树的遍历 (除children外IE都不兼容)

    返回elem元素下的第一层元素子节点
    elem.children  // [p, a, strong, ...]
    
    其他IE不兼容:
    elem.parentElement : 返回elem元素的父元素节点
    
    elem.childElementCount : elem元素节点下的元素节点长度
    
    elem.firstElementChild : 第一个元素节点
    
    elem.lastElementChild : 最后一个元素节点
    
    nextElementSibling/previousElementSibling : 后一个/前一个兄弟元素节点
    

    四、DOM树

    getElementById方式定义在Document.prototype上,因此获取ID只能通过document.getElementById()来获取
    
    getElementsByTagName方法定义在Document.prototype和Element.prototype上, 因此获取标签有两种方式
    document.getElementsByTagName('标签');
    elem.getElementsByTagName('标签'); 
    
    document.body   		  =>标签
    document.head   		  =>  标签
    document.documentElement          =>  标签
    

    五、DOM节点的创建、插入、删除、替换
    1. 创建不同类型的节点

    创建元素节点: document.createElement('标签名');
    创建文本节点: document.createTextNode('文本内容');
    创建注释节点: document.createComment('注释内容');
    创建文档碎片: document.createDocumentFragment();
    

    2. 插入节点

    appendChild() : 元素内最后插入
    语法:
    ParentNode.appendChild(A);
    理解: 在ParentNode内的最后插入A元素
    
    insertBefore(): 元素之前插入
    语法:
    ParentNode.insertBefore(A, B);
    理解: 在ParentNode内, insert A, before B , 把A插入到B的前面
    
    注意:如果插入一个已经存在的元素,则会先删除,在插入。
    

    3. 删除节点

    ParentNode.removeChild(删除内容);
    从父节点下删除指定节点,返回值是删除的内容。
    
    child.remove(); // 自己删除自己
    

    4. 替换节点

    parentNode.replaceChild(new, old); 
    // 返回值是剪切出来的old内容
    理解:在parentNode内, 用new替换old
    

    六、属性操作(Element节点的属性和方法)

    innerHTML 标签之间的内容,包括标签和文本。
    获取: elem.innerHTML
    写入: elem.innerHTML = 'ABC'; // 覆盖已有的内容
    
    innerText(火狐不兼容)/textContent(老版本IE不兼容) 
    
    在元素上设置属性
    elem.setAttribute('属性名', '属性值')
    
    获取元素上的属性值
    elem.getAttribute('属性名');
    
    删除元素上的属性
    elem.removeAttribute('属性名');
    
  • 相关阅读:
    移动端页面使用rem布局
    Vue2.0 render:h => h(App)
    sublime3 快捷键大全
    node-webkit学习之【无边框窗口用JS实现拖动改变大小等】
    mock.js-无需等待,随机产生数据,让前端独立于后端进行开发
    Sublime Text 3 遇到的一些小坑的解决方法
    Angular Cli 升级到最新版本
    Angular 表单嵌套、动态表单
    angular6 iframe应用
    JS 时间格式 相互转化
  • 原文地址:https://www.cnblogs.com/yuxi2018/p/9507048.html
Copyright © 2011-2022 走看看