Dom

作者: cj小牛 | 来源:发表于2019-03-22 11:17 被阅读0次

获取页面元素

为什么要获取页面元素
例如:我们想要操作页面上的一部分(显示,动画),需要先获取到该部分对应的元素,才进行后续操作。

  • 根据id 获取元素

     var div = document.getElementById('main');
     console.log(div)
    
  • 根据name 获取元素

    var div = document.getelementsByName('name');
    console.dir(div)

    var divs = document.getElementsByTagName('div');
    divs 是一个collection 集合(伪数组)。里面装的是得到的div对象。
    如果通过getElementsByTagName(‘标签’) 没有的话就得到一个长度为0 的collection

    getelementById("") 只能是通过document 调用
    getElementByTageName() 可以通过document 调用或者通过遭到的元素调用

<div id ='main"></div>
<div name ='main"></div>
document.getElementsByName()
根据给定的name 返回一个在(x)HTML document的节点列表集合。
 这个方法不常用,在不同的浏览起返回的东西不一样。尽量不要用。在IE 浏览器和oper 浏览器会返回两个。其他浏览器只返回name = main的这一个

 document.getElementByClassName();
 根据标签的class 属性来获取。返回一个伪数组。
兼容性是IE9 以后才支持。这个方法要看着使用

Document.querySelector()
返回文档中匹配指定的选择器组的第一个元素
eg: var el = document.queryselector(".mayclass");
       var el = document.queryselector("#id");
document.querySelectorAll(); // 获取所有的元素。
上面两个方法根据选择器来选择。兼用器是从ie8以后才支持的。
Element.queryselector()

属性操作

非表单元素的属性

href 、title 、id 、src、class 、Name
获取属性值,设置属性值

表单元素属性

innerHTML 和 innerText.Html

获取开始标签和结束标签之间的内容
innerHTML 获取内通时,如果内通中有标签,会把标签页获取到
innerText 获取内容的时候,如果内容中有标签,会将标签过滤掉。前后的换行和空白都去掉

html 转义符号

F8328A02-DDC6-424E-874B-F8C1FEA8546E.png
innerText 和textContent 区别 9FAC5347-91F4-42B2-952C-8DE7D5794D5B.png

表单元素属性

  • value 用于大部分表单元素的内容获取(option除外)
  • type 可以获取input 标签的类型(输入框或复选框等)
  • disabled 禁用属性
  • checked 复选框属性
  • selected 下拉菜单选中属性
    表单属性 设置ture 或者false
表单的焦点 onfocus

失去焦点onblur

自定义属性 getAttribute

<div id = 'box' age = '18' personId = "1"> </div>

ver box = document.getElementById('box")
console.log(box.getAttribute('age"))
console.log(box.getAttribute('personId))
设置自定义属性
box.setAttribute('sex','male')
移除属性
box.removeAttribute('sex')

节点

*nodeType 节点的类型
1 元素节点
2 属性节点
3 文本节点

  • nodeName 节点的名称
  • nodeValule 节点的值
    元素节点的nodeValue 始终是null

节点层次结构

  • 父子结构

  • 父节点 parentNode (一个节点只有一个父节点)

  • 子节点 childNodes (一个节点可以有很多个子节点,最终得到的是节点的内容,这里面有很多类型的节点,要通过高nodeType ===1 来判断是否是元素节点。)

  • children 获取所有的子元素 多用这个少用childNodes
    节点分为 元素节点、文本节点、注释节点

  • firstChild 获取第一个子节点 (这里是节点不是元素,要注意 空的话是null )

  • lastchild 获取最后一个子节点

  • fistElementChild 获取第一个子元素。

  • lastElementChild 获取最后一个子元素

    var box = document.getelementbyId('box');
    console.log(box.childNodes);//得到的是collection 伪数组
    for(var I = 0 i<box.childNodes.length;i++){
    var node = box .childNodes[I];

    if (node.nodeType ===1){ // 判断当前的子节点是否是元素节点
    }
    }

兄弟关系的节点

nextSibling 下一个兄弟节点
nextElementSibling 下一个元素节点

perviousSibling 上一个节点
perviousElementsibling 上一个元素节点

动态创建元素的三种方式是

  • doucument.write('新设置的内容<p>标签也可以生成</p>')

*innderHTML 简单的

  var box = document.getElementById('box');
  box.innerHTML = "新设置的内容<p>标签也可以生成</p>";
  • document.creatElement() 复杂的用

    var div = document.createElement('div');
    document.body.appendChild(div);
    
innerHTML 和document.creatElement()性能都差不多

innerHTML 注意字符串的拼接

常用的元素操作方法

creatElement()
appendChild()
removechild()

insertBefore(新的元素,在那个元素之前) 插入到指定的位置
replaceChild(新的元素,要替换的元素) 替换标签

事件注册

  • addEventLIstener(type,listener[,options]);
    第三个参数为Bool
    当第三个参数为false 的时候事件的传递从上往下
    当第三个参数为ture 的时候事件的传递从下往上
    type 表示事件类型的字符串 https://developer.mozilla.org/zh-CN/docs/Web/Events 具体事件详见

使用

var btn= document.getElementByID('btn');
btn.addEventListenner ('click',function(){
alert();

 })
 btn.addEventListenner ('click',function(){
alert();

 })

这样就可以给btn 添加2个事件

事件的移除

btn.onclick = null;
//如果要移除事件,注册时间的时候不能使用匿名函数
btn.addEventListener('click',function(){
btn.removeEventListener('click",bntclick)
function btnclick(){
btn.removeEventListenner('click",btnclick); // 移除注册的函数
}

事件对象

  • type 事件的类型

  • target 事件 触发事件的动西

  • currentTarget 当前出发事件的东西

  • eventPhase 事件的阶段。1 开始 2 触发 3 冒泡

  • e.clientX获取鼠标在浏览器的可视区域的坐标

  • e.clientY获取鼠标在浏览器的可视区域的坐标

  • pageX pageY 鼠标在文档中的位置

    btn.onclick = null;
    //如果要移除事件,注册时间的时候不能使用匿名函数

    function btnclick(e){
    e = e||window.event;
    console.log(e.eventPhase);事件的阶段
    var target = e.tatget || e.sctElement;
    console.log(target)
    console.log(e.cuttentRarget);
    e.type (事件的类型)

e.clientX()
e.clientY()

}

box.onclick = fn;
box .onmuouseover = fn;
box.onmouseout = fn;
function fn(2){
e = e|| window.event;
e.type 就是上面函数事件的类型
switch (e.type){
case 'click':
case 'mouseOver':

}
}

获取滚动位置

  • scrollLeft eg: document.body.scrollLeft

  • sctollTop eg: document.body.sctollTop
    获取鼠标在页面中的位置
    pageX + scrollTop
    pag3Y + scrollTopLeft

  • offsetLeft 获取元素在页面上的位置

  • offsetTop

  • stopPropagation() 停止事件传播 停止冒泡
    cancelBubble = true 老的事件

键盘事件

  • keydown 键盘按下的时候

  • keyup 键盘弹起的时候
    keyDown 和keyup的区别 keydown 的时候我们所按的键还没有落入文本框中
    keyup 键盘弹起的时候按键的键已经落入文本框

    var text = document.getElementbyId('text');
     text.onkeyDown = function(e){
     //判断用户按下的是否是数字
     e = e || window.event;
     console.log(e.keyCode); //e.keyCode. 键盘码 如果在48-59 之内的就是数字
     if((e.keycodel<48 || e.keycode>57)&& e.keyCode !==8){
      e.preventDefault();
    }
     }
    

相关文章

  • dom 级别和dom 事件处理

    dom级别:dom0 dom1 dom2 dom3 dom事件处理:dom0 dom2 dom3 (1级DOM标准...

  • WY-DOM编程

    DOM Document Object Model DOM Core DOM HTML DOM Style DOM...

  • DOM事件

    DOM级别与DOM事件 DOM级别:DOM0级、DOM1级、DOM2级、DOM3级DOM事件:DOM0级事件处理、...

  • DOM事件

    DOM级别与DOM事件 DOM级别:DOM0级,DOM1级,DOM2级和DOM3级DOM事件:DOM0级事件处理,...

  • js红包雨活动

    function Block( dom ){ this.dom = dom; //dom this.parentW...

  • DOM操作的分类

    DOM操作分为三个方面,即DOM Core(核心)、HTML-DOM和CSS-DOM。 DOM Core DOM ...

  • 虚拟 DOM 和 diff 算法

    虚拟 DOM(Virtual DOM) 通过 JS 对象表示 DOM 结构,虚拟DOM 是对 DOM 的抽象 通常...

  • jQuery——DOM

    DOM操作分类 一般来说,DOM操作分为3个方面,即DOM Core、HTML-DOM、CSS-DOM。 DOM ...

  • JavaScript高级程序设计前四章

    1. DOM级别 1.1 DOM1级 由DOM核心(DOM Core)和DOM HTML两个模块组成。 DOM核心...

  • DOM分级详解

    DOM1 级(DOM Level 1) DOM1 级由两个模块组成:DOM核心(DOM Core)和DOM HTM...

网友评论

      本文标题:Dom

      本文链接:https://www.haomeiwen.com/subject/kounmqtx.html