WEB前端 -- DOM

DOM描述

    文档对象模型(document object model,DOM) 是一种用于HTML和XML文档的编程接口,它给文档提供了一种结构化的表示方法,可以改变文档的内容和呈现方式,我们最关心的是,DOM把网页和脚本以及其他的编程语言联系了起来。DOM属于浏览器,而不是JavaScript语言规范里的规定的核心内容。

一、查找元素

1.1 直接查找

document.getElementById         根据ID获取一个标签
document.getElementByName       根据name属性获取标签集合
document.getElementByClassName  根据class属性获取标签集合
document.getElementByTagName    根据标签名获取标签集合

1.2 间接查找

    parentNode              查找父节点
    childNodes              查找所有子节点
    firstChild              查找第一个子节点
    lastChild               查找最后一个子节点
    nextSibling             查找下一个兄弟节点
    previousSibling         查找上一个兄弟节点
    
    parentElement           查找父节点标签元素
    children                查找所有子标签
    firstElementChild       查找第一个子标签元素
    lastElementChild        查找最后一个子标签元素
    nextElementSibling      查找下一个兄弟标签元素
    previousElementSibling  查找上一个兄弟标签    

二、操作

2.1  内容

    innerText
    innerHTML
    value
        input       value获取当前标签的中的值
        select      获取选中的value值(selectedIndex)
        textarea    value获取当前标签中的值

2.2 属性

    setAttribute        创建属性
    removeAttribute     删除属性
    attributes          获取所有属性

2.3 Class 操作

    className                // 获取所有类名
    classList.remove(cls)    // 删除指定类
    classList.add(cls)       // 添加类

2.4 标签并添加

2.4.1 创建标签

   a.字符串方式
        function AddEle1() {
            //创建一个标签
            var tag = "<p><input type='text /'></p>";
            //将标签添加到i1里面
            document.getElementById('i1').insertAdjacentHTML("beforeEnd",tag);
        }
        //注意:第一个参数只能是'beforeBegin'、 'afterBegin'、 'beforeEnd'、 'afterEnd'
    b.对象方式
        function AddEle2() {
            //创建一个input标签
            var tag = document.createElement('input');
            //指定input标签的格式
            tag.setAttribute('type','text');
            //设置input标签的样式
            tag.style.fontSize = '16px';
            tag.style.color = 'red';
            //创建一个p标签,将input标签包含在p标签中
            var p = document.createElement('p')
            p.appendChild(tag)
            //将标签添加到i1中
            document.getElementById('i1').appendChild(p);
        }

2.5 样式操作

    className               获取标签有哪些class样式      
    classLiss               将获取出来的标签列表的形式显示
        classList.add       添加一个class样式
        classList.remove    删除一个class样式
    
    obj.style.color = red;  以对象的方式设置样式    

2.6 位置操作

   总文档高度
    document.documentElement.offsetHeight
      
    当前文档占屏幕高度
    document.documentElement.clientHeight
      
    自身高度
    tag.offsetHeight
      
    距离上级定位高度
    tag.offsetTop
      
    父定位标签
    tag.offsetParent
      
    滚动高度
    tag.scrollTop
     
    /*
        clientHeight -> 可见区域:height + padding
        clientTop    -> border高度
        offsetHeight -> 可见区域:height + padding + border
        offsetTop    -> 上级定位标签的高度
        scrollHeight -> 全文高:height + padding
        scrollTop    -> 滚动高度
        特别的:
            document.documentElement代指文档根节点
    */

2.7 提交表单

    document.getElementById('form').submit()

2.8 其他操作

    console.log                 输出框
    alert                       弹出框
    confirm                     确认框
      
    // URL和刷新
    location.href               获取URL
    location.href = "url"       重定向
    location.reload()           重新加载
      
    // 定时器
    setInterval                 多次定时器
    clearInterval               清除多次定时器
    setTimeout                  单次定时器
    clearTimeout                清除单次定时器

2.9 事件与词法分析

2.9.1 DOM事件:

       

58面试题:行为,样式,结构 相分离的页面?
            行为:JavaScript
            样式:CSS
            结构:HTML
            this:谁调用这个函数,这个this就指向谁。
            onmouseover:鼠标在上面
            onmouseout:鼠标移动开
        绑定事件两种方式:
            a.直接标签绑定 onclick = 'xxx()'
            b.先获取Dom对象,然后进行绑定
                document.getElementById('xxx').onclick
            c.第三种方式绑定
                 mydiv.addEventListener('click',function(){console.log('aaa')},false)
                 事件的模型:
                     false:是冒泡模型
                     true:表示捕捉模型
                     ps:如果遇到多层的时候,就会用到事件模型,如果为true的时候,就是从最顶层往下触发,如果为false的时候,就是从最底层往下触发。
                     
        this当前触发事件的标签
            a. 第一种绑定方式
                <input type = 'button' onclick='Clickon(this)'>
                function Clickon(self){
                    //self 当前点击的标签
                }
            b.第二种方法绑定
                <input id = 'i1' type = 'button'>
                document.getElementById('i1').onclick = function(){
                    //this 代指当前点击的标签
                }

2.9.2 词法分析

    function t1(age){
        console.log(age);
        var age = 27;
        console.age(age);
        function age(){}
        console.age(age);
    }
    t1(3);
=============结果===============
    age(){} //声明表达式
    27
    27
================================
    分析
        active object ===> AO
            1.形式参数
            2.局部变量
            3.函数声明表达式
            
            1、形式参数
                AO.age = undefined
                AO.age=3;
            2、局部变量
                AO.age = undefined
            3、函数声明表达式
                AO.age = function()
    
    ps:在处理这样的程序时(当时不会这样写,只是举例),传进来的形参就会被函数的声明表达式给优先覆盖,覆盖后var age = 27;就是第二个打印了,而第三个就是这个表达式也没有被执行,因此还是27。
    

事件如图所示

   

原文地址:https://www.cnblogs.com/cxcx/p/6543981.html