Javascript-DOM

时间:2020-09-14 18:57:43   收藏:0   阅读:42

概念

由文档及文档中的所有元素(标签)组成的树形结构,叫做DOM树

技术图片

操作页面例子引入

按钮被点击,弹出对话框

  • 按钮:事件源
  • 点击:事件名称(onclick)
  • 被点:触发
  • 弹框:响应
<!-- html与js一起写。这里alert是一个js代码 -->
<input type="buttom" value="点击" onclick="alert(‘你触发了事件‘)"/>
<!-- html与js分离  版本1 -->
<input type="buttom" value="点击" onclick="f1()"/>
<script>
	function f1(){
        alert(‘你触发了事件‘)"
    }
</script>
<!-- html与js分离  版本2 -->
<input type="buttom" value="点击" id="btn"/>
<script>
function f1(){
    alert(‘你触发了事件‘)"
}

var btnObj=document.getElementById("btn")//根据id值获取元素对象
btnObj.onclick=f1()//为对象添加事件
</script>
<!-- html与js分离  版本3 简约-->
<input type="buttom" value="点击" id="btn"/>
<script>
document.getElementById("btn").onclick=function(){
    alert("你触发了事件")
}
</script>

案例小结

dom的内容主要是通过案例理解的,偏操作性。这里每个案例都包含相应的知识点。由于案例比较多,我把内容存储到了github,可以点击案例小结获取全部案例。根据自身需要学习。每个案例都会有相应注释帮助理解

一些梳理

DOM对象获取元素

设置标签文本内容

innerHTML

可以设置html标签内容,比如obj.innerHTML="<p>这个标签可以被解析</p>",还会获取到标签。而innerText只能获取文本内容,且不能获取标签

节点


属性

节点种类 nodeType
元素 1
属性 2
文本 3
注释 8
文档 9
节点种类 nodeName
标签节点 大写的标签名
属性节点 小写的属性名
文本节点 #text
文档节点 #document
节点种类 nodeName
标签节点 undefined或者null
属性节点 属性值
文本节点 文本内容

父级节点

<div>
    <span></span>
    <p></p>
    <ul id="ul"></ul>
</div>

<script>
  var ul=document.getElementById("ul")
  //打印下方四项可得
  console.log(ul.parentNode)//<div>...</div>
  console.log(ul.parentNode.nodeType)//1
  console.log(ul.parentNode.nodeName)//DIV
  console.log(ul.parentNode.nodeValue)//null
</script>

子节点

 <div id="div">
     <span></span>
     <p></p>
     <ul id="ul"></ul>
 </div>

 <script>
   var div=document.getElementById("div")
   console.log(div.childNodes)//NodeList(7) [text, span, text, p, text, ul#ul, text]
 </script>

获取元素或节点

创建节点

案例

元素

创建方式

  1. document.white("标签的代码及内容")

  2. 对象.innderHTML="标签及代码"

  3. document.createElement(“标签名字”)

    案例:

一些DOM方法

元素绑定事件

元素解绑事件

  1. 给事件赋值null

    //对象.on事件名称=nul
    obj.onclick=null
    
  2. removeEventListener

    //注意:这种方法只能解绑命名函数事件
    //对象.removeEventListener("事件名称",命名函数,false)
    obj.removeEventListener=("click",f1,false)
    
  3. detachEvent

    //注意:这种方法只能解绑命名函数事件
    //对象.detachEvent("on事件名称",命名函数)
    obj.detachEvent=("onclick",f1)
    

    兼容封装

    function removeEventListener(element,type,fn){
        if(element.removeEventListener){
            element.removeEventListener(type,fn,false);
        }else if(element.detachEvent){
            element.detachEvent("on"+type,fn)
        }else{
            element["on"+type]=null
        }
    }
    

事件的三个阶段

  1. 事件捕获阶段:从外到里
  2. 事件目标阶段:你选中的那一个事件触发
  3. 事件冒泡阶段:从里到外

事件冒泡

多个元素嵌套,有层次关系,这些元素都注册了相同事件。如果里面的元素的事件触发了,外面的元素的相同事件会自动触发。事件从里到外触发。

事件捕获

它与事件冒泡相反。如果你点击了最内层的事件,它不会从内容开始触发,而是从外层依次往你点击的内层经过

阻止事件冒泡

  1. 给内层元素的事件函数最后加上window.event.cancelBubble=true
  2. 给事件传入参数e——事件处理参数对象,并在函数内部加上e.stopPropagation()

冒泡阶段与捕获阶段

//这里用到了addEventListener的第三个参数,
//这个参数可以让我们在捕获阶段和冒泡阶段切换
//冒泡阶段
obj.addEventListener("click",function(e){},false )
//冒泡阶段
obj.addEventListener("click",function(e){},true)

其他

document.body		//获取body标签
document.title		//获取title的值
document.documentElement		//获取html

元素拓展

属性

offset系列

scroll系列

client系列


方法

评论(0
© 2014 mamicode.com 版权所有 京ICP备13008772号-2  联系我们:gaon5@hotmail.com
迷上了代码!