文档对象模型DOM和自定义对象以及事件

读写节点;读取节点的类型;读写节点的内容;读取节点的属性;元素节点的样式;查询节点;创建新节点;添加新节点;删除节点;自定义对象;事件;event对象

---------------------------------------------------------------------------------------------------------------------------

DOM:文档对象模型,当页面被加载时,浏览器会创建页面的文档对象。
 - 通过可编程的对象模型,JavaScript能够改变页面中的HTML元素、HTML属性、CSS样式
   还能够对页面中所有的时间做出反应。

DOM节点树:DOM模型被构造为对象的树,这棵树的根就是document对象。

-------------------------------------------------------------------------------------------
DOM提供了如下操作:
一.读写节点:    var p1 = document.getElementById("p1");
1.读取节点的名称:p1.nodeName
    - 元素节点和属性节点:标签或属性名
    - 文本节点:#text
    - 文档节点:#document
2.读取节点的类型:p1.nodeType
    - 元素节点:返回1    - 属性节点:返回2    - 文本节点:返回3
    - 注释节点:返回8    - 文档节点:返回9

二.读写节点的内容:(<>内容</>)
1.innerText:设置或获取位于对象起始和结束标签之间的文本(不包含子标签)。
2.innerHTML:设置或获取位于对象起始和结束标签之间的HTML(可以包含子标签)。

三.读取节点的属性:
1.getAttribute()方法:根据属性名称获取属性的值。语法:节点.属性名。(特殊的:节点.calssName)
例    var img = document.getElementById("i1");
    console.log(img.getAttribute("src"));
2.setAttribute():设置属性:img.setAttribute("src","../images/02.jpg");
3.removeAttribute():删除属性:img.removeAttribute("src");

四.元素节点的样式:
1.style属性:- node.style.color        - node.style.fontSize    
例    p1.style.color = "red";        p1.stylefontSize = 20;
    p1.className = "XXX";

五.查询节点:如果需要操作HTML元素,必须首先找到该元素。
查询节点的方式:
1.通过id查询:document.getElementById("id");
2.通过层次(节点关系)查询:
 - parentNode:遵循文档的上下层次结构,查找单个父节点。
 - childNodes:查孩子(带空格)      - children:查孩子(不带空格)
 - previousElementSibling:查哥哥
 - nextElementSibling:查弟弟
 - 查任意兄弟:节点.父亲.孩子[n]:parentNode.children[n]
例    var sh = document.getElementById("sh");
    console.log(sh.parentNode);
    //查孩子
    console.log(ul.childNodes);//带空格
    console.log(ul.children);//不带空格
    console.log(ul.getElementsByTagName("li"));
    //查哥哥
    console.log(sh.previousElementSibling);
    //查弟弟
    console.log(sh.nextElementSibling);
    //查任意兄弟:节点.父亲.孩子[n]
    console.log(sh.parentNode.children[2]);

3.根据标签名查询节点:getElementsByTagName()
 - 返回的是一个节点列表(即数组)
 - 使用节点列表的length属性获取个数。
 - [index]:定位具体的元素。
     - 根据指定的父元素标签名返回所有子元素:
    var ul = document.getElementById("city");
    lis = ul.getElementsByTagName("li");    
    - 会忽略文档的结构,查找整个HTML文档的所有元素:document.getElementsByTagName("xx");
    - 如果标签名称错误,则返回长度为0的节点列表。

4.根据标签的name属性的值进行查询:document.getElementsByName();
    - 返回的也是一个节点列表。

六.创建新节点:doucment.createElement(elementName);
    - elementName:要创建的元素标签名称。
    - 返回新创建的节点。
例1    创建新节点:var newNode = doucment.createElement("input");
    设置节点信息:newNode.type = "text";
              newNode.value = "mary";
              newNode.style.color = "red";
例2    var li1 = document.createElement("li");
    li1.innerHTML = "深圳";

七.添加新节点:
1.parentNode.appendChild(newNode):新节点作为父节点的最后一个子节点添加.
2.parentNode.insertBefore(newNode,refNode):
    - ref:参考节点,新节点位于此节点之前添加
例        //追加到最后
        var ul = document.getElementById("city");
        ul.appendChild(li1);
        //插入到某子标签之前
        var gz = document.getElementById("gz");
        ul.insertBefore(li1,gz);

八.删除节点:
1.删除某个子节点:node.removeChild(childNode);
例    var hf = document.getElementById("hf");
    ul.removeChild(hf);
2.删除节点本身:node.remove();
例    var wx = document.getElementById("wx");
    wx.remove();
-----------------------------------------------------------------------------------------
自定义对象:是一种特殊的数据类型,由属性和方法封装而成。
1.直接创建:
例    采用直接量的方式创建对象
    function f1(){
        var stu = {"name":"小花","age":23,"work":function(){alert("吹牛逼")}};
        alert(stu.name);
        alert(stu.age);
        stu.work();
    }
2.使用构造器创建:
例    function f2(){
        var teacher = new Object();
        teacher.name = "苍老师";
        teacher.age = 40;
        teacher.work = function(){
            alert("教Java");
        }
        alert(teacher.name);
        alert(teacher.age);
        teacher.work();
    }
3.采用自定义构造器创建对象:
例    function Coder(name,age,work){
        //this代表创建出来的对象
        //.key代表对象的属性
        this.name = name;
        this.age = age;
        this.work = work;
    }
    function f3(){
        var cd = new Coder("花小强",18,function(){
            alert("种向阳花");
        });
        alert(cd.name);
        alert(cd.age);
        cd.work();
    }
------------------------------------------------------------------------------------------
事件:指页面元素状态改变,用户在操作鼠标或键盘时触发的动作。

一.事件的类型:
1.鼠标事件:onclick/ondblclick/onmousedown/onmouseup/onmouseover/onmouseout
2.键盘事件:onkeydown/onkeyup
3.状态事件:onload/onchange/onfocus/onblur/onsubmit

二.事件定义:
1.在html属性定义中直接处理事件:直接绑定事件。
例    <input type="button" value="按钮1" οnclick="f1();"/>

2.后绑定事件:在页面加载后,通过js获取元素并为其绑定事件。
例    var btn2 = document.getElementById("btn2");
    btn2.onclick = function(){
        alert(2);
    }

3.    /*
     * 3后绑定事件:在onload事件中获取元素并为其绑定事件。
     * onload是页面加载事件,在页面加载后自动触发,写在该事件内的js
     * 和写在body末尾的js等效
     */
     window.onload = function(){
        var btn3 = document.getElementById("btn3");
        btn3.onclick = function(){
            alert(3);
        }
    }
三.event对象:任何事件触发后将会产生一个event对象。event对象记录了事件发生时的
          鼠标位置、键盘按键状态和触发对象等信息。
1.获取event对象:
 - 在HTML代码中,在定义事件时使用event关键字将事件的对象作为参数传入方法。
 - 调用函数时传入event,可以通过arguments[0]获取,也可以通过参数接收。
例    <body>中的代码:<input type="button" id="btn4" value="按钮4" οnclick="f1(event);"/>
    <script>中的代码:function f1(e){
                 console.log(e);
                  alert(e.clientX+","+e.clientY);
              }
2.获取event对象事件源:对于event对象,经常需要获得事件源。
    - 事件源:即触发事件的元素(时间的目标节点);
IE浏览器:event.srcElement    Firefox浏览器:event.target
所有为了兼容性通常获取事件源的方式为:
    function f1(e){
        var obj = e.srcElement||e.target;
        console.log(obj);
    }

四.事件的处理机制:冒泡机制。
1.可以取消事件的冒泡:
 - event.stopPropagation();
 - event.cancelBubble = true;
例    <input type="button" value="C" οnclick="event.cancelBubble = true;alert(1)"/>

转载于:https://my.oschina.net/langgege/blog/673126

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值