zoukankan      html  css  js  c++  java
  • Dom

    DOM 文档对象模型,dom是把文档当对象看待,dom顶级对象是document,dom主要是操作页面元素来改变元素里面的内容、属性等,dom是w3c规范

    <!-- 1.获取元素 -->
    document.getElementById(id)              // <div id="time">2019</div>  var timer = document.getElementById('time');
    document.getElementsByTagName('标签名')  //当页面增加了标签,这个集合中也就增加了元素。
    document.getElementsByClassName('类名')  //根据类名返回元素对象集合   var boxs = document.getElementsByClassName('box');
    
    document.querySelector('选择器');          //加# .  css怎么写就怎么写
    document.querySelectorAll('选择器')       //根据指定选择器返回
    
    document.body //获取body
    document.documentElement  //返回html元素
    
    <!-- 2.常见鼠标事件 -->
    onclick  //点击鼠标左键触发
    onmouseover //鼠标经过   鼠标经过自身盒子会触发,经过子盒子还会触发 会冒泡
    onmouseout //鼠标离开
    onfocus //获取鼠标焦点    //ele.onfocus = function() {}
    onblur //失去鼠标焦点
    onmousemove //鼠标移动触发
    onmouseup //鼠标弹起
    onmousedown //鼠标按下
    mouseenter  //只会经过自身盒子触发 不会冒泡
    mouseleave  //同样不会冒泡
    contextmenu 我们可以禁用右键菜单
    selectstart  禁止选中文字 
            <p>我是一段不愿意分享的文字</p>
            <script>   // 1. contextmenu 我们可以禁用右键菜单
                document.addEventListener('contextmenu', function(e) {
                        e.preventDefault();
                    })
                document.addEventListener('selectstart', function(e) {
                    e.preventDefault();   // 2. 禁止选中文字 selectstart
                })
            </script>
    
    <!-- 键盘事件 -->
    onkeyup  按键松开触发
    onkeydown   按键按下的时候触发  能识别功能键 比如 ctrl shift 左右箭头  不区分字母大小写  a 和 A 得到的都是65
    onkeypress  按键按下的时候触发  不能识别功能键 比如 ctrl shift 左右箭头  区分字母大小写  a 97 和 A 得到的是65
                document.addEventListener('keydown', function() {
                    console.log('我按下了down');
                })
    
    <!-- 键盘事件对象 -->
    keyCode  //e.keyCode返回该按键ASCII码
                document.addEventListener('keyup', function(e) {
                    if (e.keyCode === 65) {
                        alert('您按下的a键');
                    } else {
                        alert('您没有按下a键')
                }  })        
    
    <!-- 3.改变元素内容(获取或设置) -->
    element.innerText  //会去除空格和换行  不会识别html    
    element.innerHTML  //会保留空格和换行   获取或改变element元素内容 div.innerHTML(123)
        //div.innerHTML = '<strong>今天是:</strong> 2019';  就是在div里插入内容
    
    <!-- 4.常用元素属性 -->
    src href id alt title  
    disabled、checked、selected type value  //表单元素的属性
    
    <!-- 5.样式属性操作 -->
    element.style  //行类样式操作 js采用驼峰命名法    // this.style.backgroundColor = 'purple';
    element.className  //类名样式操作  //如果想要保留原先的类名,我们可以多类名选择器  this.className = 'first change';
    
    <!-- 6.自定义属性操作 -->
        <div id="demo" index="1" class="nav"></div>
    element.属性  //获取元素自带属性  //div.id
    element.getAttribute('属性') //获取自定义属性  //div.getAttribute('index')
    
    element.属性 ='值'  //div.id = 'test'; 设置属性
    element.setAttribute('属性')  //div.setAttribute('index', 2);
    
    element.removeAttribute('index')  //移除属性
    
    <!-- 7.节点操作 -->
    元素.parentNode  //父级节点
    元素.children   //元素子节点  ul.children[1]
    元素.nextSibling  //下一个兄弟节点
    元素.previousSibling  //上一个兄弟节点
    
    document.createElement('li')   //创建元素节点
    父元素.appendChild('li')  //添加节点  添加到末尾
    父元素.insertBefore('li', ul.children[0]);  //添加到指定元素前面
    node.removeChild()   //方法从 node节点中删除一个子节点,返回删除的节点。  // ul.removeChild(ul.children[0]);
    
    元素.cloneNode(true)  //括号为true 深拷贝 复制标签复制里面的内容      // var lili = ul.children[0].cloneNode(true);
                         false 浅拷贝 只复制标签不复制里面的内容  // 复制(克隆)节点
                         <ul>
                            <li>1111</li>
                            <li>2</li>
                        </ul>
                        <script>
                            var ul = document.querySelector('ul');
                            var lili = ul.children[0].cloneNode(true);
                            ul.appendChild(lili);
                        </script>
    
    <!-- 8.事件监听 -->
    添加事件监听:
    传统方式: btn.onclick = function(){}
    addEventListener()事件监听(IE9以后支持):
        btns[1].addEventListener('click', function(e) {  //添加事件监听  e.target 指向我们点击的那个对象 
            alert(33);
            console.log(e.target)
            btns[1].removeEventListener('click', fn);  //移除事件事件监听
        })
    attacheEvent()事件监听(IE678支持):
        btns[2].attachEvent('onclick', function() {
            alert(11);
        })
    
    移除事件监听:
            <div>1</div> <div>2</div>  <div>3</div>
            var divs = document.querySelectorAll('div');
    传统方式: 
            divs[0].onclick = function() {
                alert(11);
                divs[0].onclick = null;
            }
    removeEventListener 删除事件:
            divs[1].addEventListener('click', fn) // 里面的fn 不需要调用加小括号
            function fn() {
                alert(22);
                divs[1].removeEventListener('click', fn);
            }
    detachEvent:
            divs[2].attachEvent('onclick', fn1);
            function fn1() {
                alert(33);
                divs[2].detachEvent('onclick', fn1);
            }
    
    <!-- 执行事件的步骤 -->
    1. 获取事件  2. 注册事件(绑定事件)  3. 添加事件处理程序(采取函数赋值形式)
    
    <!-- DOM事件流 -->
    事件发生会在元素节点按特定顺序传播, 这个传播过程称为DOM事件流
        <div class="father">
            <div class="son">son盒子</div>
        </div>
        //点击son后冒泡顺序  son -> father ->body -> html -> document
    
    <!-- 事件对象 -->
    事件发生后,跟事件相关的一系列信息数据的集合都放到这个对象里面,这个对象就是事件对象 event
    鼠标触发事件的话,会得到鼠标的相关信息,如鼠标位置
        div.onclick = function(e) {
            // 事件对象
            e = e || window.event;   //兼容IE6~8
            console.log(e);
        }
    事件对象的属性和方法:
    e.target 返回触发事件的元素 
        <ul>  <li>abc</li> <li>abc</li> </ul>
        <script>
            var ul = document.querySelector('ul');
            ul.addEventListener('click', function(e) {
                  console.log(this);  // 我们给ul 绑定了事件  那么this 就指向ul  
                  console.log(e.target);  // e.target 触发了事件的对象 我们点击的是li e.target 指向的就是li
            });
        </script>
    e.type  返回事件的类型 如click mouseover
    e.stopPropagation()  阻止冒泡标准(标准)
    window.event.cancelBubble = true; // 非标准 ie6-ie8 阻止冒泡
    e.preventDefault()  阻止默认行为(标准)  或 return false没有兼容性问题  //比如不让连接跳转
    
            son.addEventListener('click', function(e) {
                alert('son');
                e.stopPropagation(); // stop 停止  Propagation 传播
            });
    
    <!-- 事件委托 -->
    给父元素注册事件,利用事件冒泡,当子元素的事件触发,会冒泡到父元素,然后去控制相应的子元素。
    说白了就是,不给子元素注册事件,给父元素注册事件,把处理代码在父元素的事件中执行。
    事件委托的作用: 我们只操作了一次 DOM ,提高了程序的性能  动态新创建的子元素,也拥有事件
            <ul>
                <li>知否知否,点我应有弹框在手!</li>
                <li>知否知否,点我应有弹框在手!</li>
            </ul>
            <script>
                // 事件委托的核心原理:给父节点添加侦听器, 利用事件冒泡影响每一个子节点
                var ul = document.querySelector('ul');
                ul.addEventListener('click', function(e) {
                    // e.target 这个可以得到我们点击的对象
                    e.target.style.backgroundColor = 'pink';
                })
            </script>
    
    <!-- 鼠标事件对象 -->
    e.clientX  e.clientY  返回鼠标相对于浏览器窗口可视区x和y坐标
    e.pageX    e.pageY    返回鼠标相对于文档页面的X和y坐标 ie9以上支持
    e.screenX  e.screenY  返回鼠标相对于鼠标在电脑屏幕的x和y坐标
    
  • 相关阅读:
    leetcode链表--15、reverse-nodes-in-k-group(按照k值进行k个结点的逆序)
    4、消除重复元素--网易2017春招
    24、剑指offer--二叉树中和为某一值的路径
    leetcode链表--14、add-two-numbers(两链表相加 得到新链表)
    3、调整队形--网易2017春招
    2、赶去公司--网易2017春招
    1、双核处理--网易2017春招
    CSS3自定义滚动条样式 -webkit-scrollbar
    git安装使用
    div+css居中
  • 原文地址:https://www.cnblogs.com/xm0328/p/13783037.html
Copyright © 2011-2022 走看看