JavaScripts学习日记——DOM

DOM Document Object Model 文档对象模型  整合js和html css.控制html文档行为.
DOM就是把页面当中所有内容全部封装成对象.
HTML文档中万物皆对象.

1.对象的分类
    Document ***
    Element  ***
    Attribute
    Text
    Common
以上5类对象 具有一些共同特征 抽象出了一个父类
    Node
        自身属性
            nodeName
            nodeValue
            nodeType   Document ==> 9   Element ==> 1
        导航属性
            parentNode
2.页面中获得Element对象的方式
    Document
        getElementById();
        getELementsByTagName();
        getElementsByClassName();
        getElementsByName();
    Element(局部中获得Element的方式)
        getELementsByTagName();
        getElementsByClassName();
3.事件
    给Element对象附加一些事件属性.属性的类型是Function类型.这些Function属性在什么时候被运行呢?
只看属性的名称.
属性名称:
    onclick ==> 单击时触发
    ondblclick ==> 双击时触发
    onblur ==>  失去焦点时触发
    onfocus ==> 得到焦点时触发
    onchange ==> 用于表单元素, 当元素被修改时触发
    onkeydown ==> 当键盘按键被按下时
    onmousemove ==> 当鼠标移动时触发
    onmousedown ==> 当鼠标按键按下时触发
    onmouseover ==> 当鼠标指向时触发
    onmouseout ==> 当鼠标移出时触发
    onsubmit ==> 当表单提交时触发
    onload  ==>  只给body标签使用.当页面加载完成后 执行.

两种添加事件的方式:

<body>
    <input type="button" value="点我" onclick="alert(‘aaa‘);" id="abc" />
<script type="text/javascript">
//第一种为元素附加事件属性的方式
//就是在标签上写上属性名称和 对应执行的代码 例如: onclick="alert(‘aaa‘);"
//如上代码就是在为input对象附加 一个onclick的Function属性.
//alert(‘aaa‘); 就是 Function的方法体.
//证明如下
var input = document.getElementById("abc");
            alert(input.onclick);
</script>
</body>
<body>
    <input type="button" value="点我" id="abc" />
<script type="text/javascript">
//第二种为元素附加事件属性的方式
var input = document.getElementById("abc");
input.onclick = function(){
    alert(‘bbb‘);
}

</script>
</body>

3.事件详情的获得:
        我们获得事件详情要找到侦探来知道(事件Event);
        如何来获得Event对象呢?
        Event对象是在事件发生时被创建, 并传递给我们的事件Function中.所以我们直接使用即可.

使用示例:

<body>
    <input type="text" id="abc"  />

<script type="text/javascript">
//onkeydown 当键盘某个键按下时触发  应用场景: 当用户在最后一个输入框按下回车按键时,表单提交.
//问题1? 如何获得用户按下的是哪个键呢? 找侦探问.
//问题2? 如何获得侦探? 侦探在事件发生时系统已经创建好了,并且会在事件函数被调用时传给事件函数.我们获得仅仅需要接收一下即可.

var input = document.getElementById("abc");
input.onkeydown = function (event,abc){
    //拿到侦探之后 如何获得 事件详情(哪个键被按下呢)
    //alert(event.keyCode);
    //经过观察 回车按键对应的 keyCode是 13
    if(event.keyCode == 13){
        alert("表单提交啦!");
    }
}
</script>
</body>

4.Event对象
        属性:
            keyCode
            button
            clientX(了解) 返回当事件被触发时,鼠标指针的水平坐标。
            clientY(了解) 返回当事件被触发时,鼠标指针的垂直坐标。
        方法:
            preventDefault() ==> 阻止默认关联事件的发生.  
            stopPropergation ==> 组织事件的向下传播.
关于页面对象的增删该查
    相关方法:
        Document
            creatElement
        Element
            方法
            appendChild
            removeChild
            replaceChild
            cloneNode
            setAttribute(key,value)
            属性
            innerHTML 修改标签体.(支持直接书写html代码)
DHTML的概念 Dynamic HTML 动态网页技术
    就是整合4门技术 ==>  DOM HTML CSS JavaScript
    用通俗的话说: DHTML就是 将我们的之前学的DOM对象进行增强.
    什么是增强?  对对象来讲,增强无非就是 增加新的属性获得方法.
5.增删改查

<script type="text/javascript">
//在第一个div中动态增加一个a标签. 该a标签点击之后跳转到 传智首页.
    function addNode(){
        //1.获得 第一个div
        var div = document.getElementById("div_1");
        //2.创建a标签  createElement==>创建一个a标签   <a></a>
        var eleA =  document.createElement("a");
        //3.为a标签添加属性 <a href="http://www.itcast.cn"></a>
        eleA.setAttribute("href", "http://www.itcast.cn");
        //4.为a标签添加内容 <a href="http://www.itcast.cn">传智</a>
        eleA.innerHTML = "传智";
        //5.将a标签添加到div中
        div.appendChild(eleA);
    }
    //点击后 删除div区域2
    function deleteNode(){
        //1 获得要删除的div区域
            var div = document.getElementById("div_2");
        //2.获得父亲
            var parent = div.parentNode;
        //3 由父亲操刀
            parent.removeChild(div);
    }
    //点击后 替换div区域3 为一个美女
    function updateNode(){
        //1 获得要替换的div区域3
        var div = document.getElementById("div_3");
        //2创建img标签对象 <img />
        var img = document.createElement("img");
        //3添加属性 <img src="001.jpg" />
        img.setAttribute("src", "001.JPG");
        //4.获得父节点
        var parent = div.parentNode;
        //5.替换
        parent.replaceChild(img, div);
    }
    //点击后 将div区域4 克隆一份 添加到页面底部

    function copyNode(){
        //1.获取要克隆的div
        var div = document.getElementById("div_4");
        //2.克隆 参数为true 那么克隆时克隆所有子元素. false 只克隆自己
        var div_copy = div.cloneNode(true);
        //3.获得父亲
        var parent = div.parentNode;
        //4.添加
        parent.appendChild(div_copy);
    }

</script>

6.增加表格数据

<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">

        <title>添加用户</title>
    </head>
    <body>
        <center>
            <br><br>
            添加用户:<br><br>
            姓名: <input type="text" name="name" id="name" />&nbsp;&nbsp;
            email: <input type="text" name="email" id="email" />&nbsp;&nbsp;
            电话: <input type="text" name="tel" id="tel" /><br><br>
            <button id="addUser">提交</button>
            <br><br>
            <hr>
            <br><br>
            <table id="usertable" border="1" cellpadding="5" cellspacing=0>
                <tbody>
                    <tr>
                        <th>姓名</th>
                        <th>email</th>
                        <th>电话</th>
                        <th>&nbsp;</th>
                    </tr>
                    <tr>
                        <td>Tom</td>
                        <td>[email protected]</td>
                        <td>5000</td>
                        <td><a href="javascript:void(0)" onclick="del(this)" >Delete</a></td>
                    </tr>
                    <tr>
                        <td>Jerry</td>
                        <td>[email protected]</td>
                        <td>8000</td>
                        <td><a href="javascript:void(0)" onclick="del(this)" >Delete</a></td>
                    </tr>
                </tbody>
            </table>
        </center>

    </body>
    <script language="JavaScript">
    /**
    <a href="javascript:void(fun1())" >haha</a>
        function fun1(){
            alert(‘haha‘);
            return "haha";
        }
    */
        /* document.getElementById("addUser").onclick=function(){
            // value属性属于 DHTML的范畴. Dynamic HTML ==> 动态网页  ==> DOM JS CSS HTML ==> DHTML实际上就是对DOM对象的增强.
            // DHTML为我们的DOM对象 附加了很多 便利 属性和方法.能简化我们的开发工作.

                //1.获得表单中 名字 邮箱 电话信息
                var name = document.getElementById("name").value;
                var email = document.getElementById("email").value;
                var tel = document.getElementById("tel").value;
                //2.组装tr
                var tr = document.createElement("tr");
                //3.组装td
                var nameTd = document.createElement("td");
                nameTd.innerHTML = name;
                var emailTd = document.createElement("td");
                emailTd.innerHTML = email;
                var telTd = document.createElement("td");
                telTd.innerHTML = tel;
                //4.将td添加到tr中
                tr.appendChild(nameTd);
                tr.appendChild(emailTd);
                tr.appendChild(telTd);
                //5.将tr添加到table中
                document.getElementById("usertable").appendChild(tr);
        } */
        document.getElementById("addUser").onclick=function(){
            // value属性属于 DHTML的范畴. Dynamic HTML ==> 动态网页  ==> DOM JS CSS HTML ==> DHTML实际上就是对DOM对象的增强.
            // DHTML为我们的DOM对象 附加了很多 便利 属性和方法.能简化我们的开发工作.

                //1.获得表单中 名字 邮箱 电话信息
                var name = document.getElementById("name").value;
                var email = document.getElementById("email").value;
                var tel = document.getElementById("tel").value;
                //2组装tr
                var tr = document.createElement("tr");
                tr.innerHTML="<td>"+name+"</td><td>"+email+"</td><td>"+tel+"</td><td><a href=‘javascript:void(0)‘ onclick=‘del(this)‘ >Delete</a></td>";
                //3将tr添加到table中
                document.getElementById("usertable").appendChild(tr);
        }
        //小知识点: 协议名:协议内容
            // 将a标签自身功能阉割.
            //    <a href="javascript:void(0)" onclick="del(this)" >Delete</a>
        //小知识点: this 指向 方法的调用者,在当前例子中.this指向了a标签
                function del(obj){
                obj.parentNode.parentNode.parentNode.removeChild(a.parentNode.parentNode);

        }

    </script>
</html>
时间: 2024-09-29 16:55:50

JavaScripts学习日记——DOM的相关文章

JavaScripts学习日记——DOM SAX JAXP DEMO4J XPath

今日关键词: XML解析器 DOM SAX JAXP DEMO4J XPath XML解析器 1.解析器概述 什么是解析器 XML是保存数据的文件,XML中保存的数据也需要被程序读取然后使用.那么程序使用什么来读取XML文件中的数据呢?XML解析器!例如.properties文件的解析器是Properties类一样! XML不只被Java语言使用,还被C++.C#.Javascript等等语言使用,所以解析XML不是一门语言的工作! DOM和SAX介绍 主流的XML解析有两种标准:DOM和SAX

JavaScripts学习日记——ECMAscript

1.Function对象 Function是一个很特殊的对象,特殊在该对象就像java中的方法一样,可以运行,可以传参数. 三种定义function对象的方法: 1.function fun1(a,b){       alert(a+b);           } 2.var fun2 = new Function("a","b","alert(a+b);");//最后一个参数代表函数体 3.var fun3 = function(a,b){  

JavaScripts学习日记——XML DTD Schema

今日关键词: XML DTD Schema 1.XML 1 XML的概述 1.1 什么是XML XML全称为Extensible Markup Language,意思是可扩展的标记语言.XML语法上和HTML比较相似,但HTML中的元素是固定的,而XML的标签是可以由用户自定义的. W3C在1998年2月发布1.0版本,2004年2月又发布1.1版本,但因为1.1版本不能向下兼容1.0版本,所以1.1没有人用.同时,在2004年2月W3C又发布了1.0版本的第三版.我们要学习的还是1.0版本!!

学习日记之状态模式和Effective C++

状态模式(State):当一个对象内在状态改变时,允许改变其行为,这个对象看起来像是改变了其类. (1),状态模式主要负责解决的是当控制一个对象转换的条件表达式过于复杂时的情况.把状态的判断逻辑转移到表示不同状态的一系列类中,可以把复杂的判断逻辑简化. (2),状态模式的好处是将与特定状态相关的行为局部化,并且将不同状态的行为分割开来. (3),将特定的状态相关的行为都放入一个对象中,由于所有与状态相关的代码都存在于某个ConcreteState中,所以通过定义新的子类可以很容易地增加新的状态和

学习日记

五一耍了三天,自己的计划有泡汤,那种制止力哪里去了,不过我认真起来还有有废寝忘食的时候,不过希望这种时候多一点,回家妈妈告诉我,她给老师打电话了的,老师说了我的一些情况,不过我没有老师说的那么好,学习在班上算中等.我觉得还算不上吧!任重而道远吧. Java中有个比较重要的类Properties(Java.util.Properties),主要用于读取Java的配置文件,各种语言都有自己所支持的配置文件,配置文件中很多变量是经常改变的,这样做也是为了方便用户,让用户能够脱离程序本身去修改相关的变量

学习日记之解释器模式和Effective C++

解释器模式(interpreter):给定一个语言,定义它的文法的一种表示,并定义一个解释器,这个解释器使用该表示来解释语言中的句子. (1),如果一种特定类型的问题发生的频率足够高,那么可能就值得将该问题的各个实例表述为一个简单语言的句子.这样可以构建一个解释器,该解释器通过解释这些句子来解决该问题. (2),当一个语言需要解释执行,并且你可将该语言中的句子表示为一个抽象的语法树时,可使用解释器模式. (3),容易改变和扩展文法,因为该模式使用类来表示文法规则,你可以使用继承来改变和扩展该文法

学习日记之中介者模式和Effective C++

中介者模式(Mediator):用一个中介对象来封装一系列的对象交互.中介者使各对象不需要显示地相互引用,从而使其耦合松散,而且可以独立地改变他们之间的交互. (1),中介者模式很容易在系统中应用,也很容易在系统中误用.当系统出现多对多交互复杂的对象群时,不要急于使用中介者模式,而要反思你在系统的设计上是不是合理. (2),中介者的出现减少了各个对象的耦合,使得可以独立地改变和复用各个对象和中介者. (3),由于把对象如何协作进行了抽象,将中介者作为一个独立的概念并将其封装在一个对象中,这样关注

学习日记之职责链模式和Effective C++

职责链模式(Chain of Responsibility):使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系.将这个对象连成一条链,并沿着该条链传递该请求,直到有一个对象处理它为止. (1),当客户提交一个请求时,请求时沿着链传递直到有一个 ConcreteHandler 对象负责处理它. (2),接收者和发送者都没有对方的明确信息,切链中的对象自己也不知道链的结构.结果是职责链可简化为对象之间的连接,它们仅需保留一个指向其后继者的引用.而不惜保留它所有的候选接收者的引用

学习日记之单例模式和Effective C++

单例模式(Singleton):保证一个类仅有一个实例,并提供一个访问它的全局访问点. (1),通常我们可以让一个全局变量使得一个对象被访问,但它不能防止你实例化多个对象.一个最好的办法就是,让类自身负责保存它的唯一实例.这个类可以保证没有其他实例被创建,并且它可以提供一个访问该实例的方法. (2),lock 是确保当一个线程位于代码的临界区时,另一个线程不进入临界区.如果其他线程试图进入锁定的代码,则它将一直等待,知道该对象被释放. (3),双重锁定解决效率问题. (4),C#与公共语言运行库