zoukankan      html  css  js  c++  java
  • javascript DOM操作

    1 javascript组成

    三部分:

    ECMAScript:是核心,规定了语法

    浏览器对象模型:Browser Object Model,简称BOM

    文档对象模型:Document Object Model,简称DOM

      Bom的window对象的具体内容,请看下图(存为大图查看)

    2 Dom操作

    2.1

    通过 HTML DOM,可访问 JavaScript HTML 文档的所有元素。

    当网页被加载时,浏览器会创建页面的文档对象模型(Document Object Model)。

    HTML DOM 模型被构造为对象的树:

     

    2.2 查找 HTML 元素

    2.2.1 通过 id 查找 HTML 元素

    var x=document.getElementById("intro");

    如果找到该元素,则该方法将以对象(在 x 中)的形式返回该元素。

    2.2.2通过标签名查找 HTML 元素

    var y=x.getElementsByTagName("p");

    2.2.3通过类名找到 HTML 元素

    var x=document.getElementsByClassName("intro");

    2.2.4通过name属性值找到 HTML 元素

    document.getElementsByName() 

    2.3

    以上方式,只有通过id的方式,返回的是一个元素对象,

    其他三种方式,返回的都是数组,数组元素才是元素对象。

    所以,元素对象的可以这样表示:

    var texts=document.getElementsByClassName('u-text')[0];

    示例:找到div下面的p

    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>标题</title>
    </head>
    <body>
    <div id="box">
    	<p>找到这里</p>
    </div>
    	
    <script>
    var box=document.getElementById('box').getElementsByTagName('p')[0];
    console.log(box);
    
    </script>
    
    </body>
    </html>
    

    console结果:<p>找到这里</p>

    2.4通过节点的方式找到html元素(不常用)

    http://www.runoob.com/dom/dom-node.html

    https://blog.csdn.net/qq_39198420/article/details/78020557 

    以下操作内容、样式、事件、属性等都是针对具体的元素对象:

    2.5 改变 HTML 元素的内容  

    2.5.1

    非表单元素:使用 innerHTML 属性

    例:var con=div.innerHTML;  //获取内容

                  con=123;  //修改内容

    2.5.2 表单元素:value是表单元素的内容

    2.6 改变 HTML 元素的属性

    (1)div.getAttribute('id');  //获取属性

        div.setAttribute('class','red');  //设置属性

        div.removeAttribute();  //移除属性

    (2)可以直接用“点”的方式,但是只能获取到元素官方规定的属性,例如 img.src,自定义的属性无法获取到

    2.7 改变 HTML 样式

    语法:document.getElementById(id).style.property=新样式 

    1)只能获取/设置 行内样式

    2)类似background-color这样中间带线的属性,用style操作时,要改成驼峰式命名,把第二个单词改成大写。

    3 事件

      事件就是动作

      HTML 事件的例子:

        当用户点击鼠标时

        当网页已加载时

        当图像已加载时

        当鼠标移动到元素上时

        当输入字段被改变时

        当提交 HTML 表单时

        当用户触发按键时

    3.1 事件属性

    如需向 HTML 元素分配 事件,可以使用事件属性。直接在标签里添加事件属性: 

    <button onclick="displayDate()">点这里</button>

    3.2 使用 HTML DOM 来分配事件

    在js中用匿名函数的方式:

    document.getElementById("myBtn").onclick=function(){displayDate()};

    3.3常用事件:

    onclick 事件:点击

    onchange 事件:会在域的内容改变时发生

    onmouseover 和 onmouseout 事件:鼠标移入移出

    onmousedown、onmouseup  事件:鼠标按下和松开

    3.4 addEventListener() 方法

    3.4.1说明:

    addEventListener() 方法用于向指定元素添加事件句柄。

    addEventListener() 方法添加的事件句柄不会覆盖已存在的事件句柄。

    可以向一个元素添加多个事件句柄。

    可以向同个元素添加多个同类型的事件句柄,如:两个 "click" 事件。

    可以向任何 DOM 对象添加事件监听,不仅仅是 HTML 元素。如: window 对象。

    addEventListener() 方法可以更简单的控制事件(冒泡与捕获)。

    当使用 addEventListener() 方法时, JavaScript 从 HTML 标记中分离开来,可读性更强, 在没有控制HTML标记时也可以添加事件监听。

    可以使用 removeEventListener() 方法来移除事件的监听。

    3.4.2语法

    element.addEventListener(event, function, useCapture);

    第一个参数是事件的类型 (如 "click" 或 "mousedown").

    第二个参数是事件触发后调用的函数。

    第三个参数是个布尔值用于描述事件是冒泡还是捕获。该参数是可选的。

    3.5 事件流

    事件传递有两种方式:冒泡与捕获。

    事件传递定义了元素事件触发的顺序。 如果将 <p> 元素插入到 <div> 元素中,用户点击 <p> 元素,

    在 冒泡 中,内部元素的事件会先被触发,然后再触发外部元素,即: <p> 元素的点击事件先触发,然后会触发 <div> 元素的点击事件。

    在 捕获 中,外部元素的事件会先被触发,然后才会触发内部元素的事件,即: <div> 元素的点击事件先触发 ,然后再触发 <p> 元素的点击事件。

    addEventListener() 方法可以指定 "useCapture" 参数来设置传递类型:

    addEventListener(event, function, useCapture);

    默认值为 false, 即冒泡传递,当值为 true 时, 事件使用捕获传递。

    示例:事件流冒泡和获取的演示 

    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>事件流</title>
    <style>
    #box1{ 100px;height: 100px;background: #0168B7;margin: 30px auto 0;}
    #box2{ 200px;height: 200px;background:#20B2AA;margin: 30px auto 0;}
    #box3{ 300px;height: 300px;background:#286CC9;color: #fff;}
    </style>
    </head>
    <body>
    <div id="box3">
    	内容3,调用函数3
    	<div id="box2">
    		内容2,调用函数2
    		<div id="box1">
    			内容1,调用函数1
    		</div>
    	</div>
    </div>	
    <script>
    var box1=document.getElementById('box1');
    var box2=document.getElementById('box2');
    var box3=document.getElementById('box3');
    
    //事件冒泡
    box1.addEventListener('click',f1);
    box2.addEventListener('click',f2);
    box3.addEventListener('click',f3);
    
    //事件捕获
    //box1.addEventListener('click',f1,true);
    //box2.addEventListener('click',f2,true);
    //box3.addEventListener('click',f3,true);
    
    function f1(e){
    	console.log('调用函数1');
    	e.stopPropagation();  //停止事件的传播
    }
    function f2(e){
    	console.log('调用函数2');
    	e.stopPropagation();  //停止事件的传播
    }
    function f3(e){
    	console.log('调用函数3');
    	e.stopPropagation(); //停止事件的传播	
    }
    
    </script>
    
    </body>
    </html>
    

    3.6 removeEventListener() 方法

    removeEventListener() 方法移除由 addEventListener() 方法添加的事件句柄:

    4 事件对象

      每个事件(包括鼠标、键盘事件)触发执行的过程中,都有对应的事件对象,通过事件对象可以获得鼠标相对页面的坐标信息、通过事件对象也可以感知什么键子被 触发执行、通过事件对象还可以阻止事件流产生、阻止浏览器默认动作。 

    4.1 获得事件对象

           node.onclick = function(evt){evt就是事件对象}

           addEventListener(类型,function(evt){}/函数名字);

                  function 函数名称(evt){}

           事件处理函数的第一个形参就是事件对象

    4.2 事件对象作用

    获得鼠标的坐标信息

           event.clientX/clientY;    //相对dom区域坐标

           event.pageX/pageY;        //相对dom区域坐标,给考虑滚动条位置

           event.screenX/screenY;    //相对屏幕坐标

    阻止事件流:

           event.stopPropagation();  //主流浏览器

           冒泡型、捕捉型都可以进行阻止,为了浏览器兼容处理,只考虑冒泡型。

    阻止浏览器默认动作

           浏览器默认动作,注册form表单页面,提交表单的时候,浏览器的页面会根据action属性值进行跳转,这个动作称为“浏览器默认动作”。

           event.preventDefault();    //主流浏览器     

    感知被触发键盘键子信息

      event.keyCode  获得键盘对应的键值码信息

      通过事件触发时候获得的keyCode数值码信息可以对应键盘的键子信息。

    示例:键盘事件

    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>键盘事件</title>
    </head>
    <body>
    <input type="text" id="tt"/>
    
    <script>
    var inputDom=document.getElementById('tt');
    inputDom.onkeydown=function(e){
    	console.log(e.keyCode);
    	if(e.keyCode==13){
    		alert(this.value);
    	}
    }
    
    </script>
    
    </body>
    </html>
    

    Dom操作综合练习:  

    <!DOCTYPE html>
    <html>
    <head>
    <meta charset="UTF-8">
    <title>练习</title>
    <style>
    	.box{ 100px;height: 100px;border: 1px solid green;margin-top: 20px;transition: 3s;}
    </style>
    </head>
    
    <body>
    <input type="text" class="u-text" value="现在value值是1"/>
    <input type="button" id="btn" value="点击改变value值" />
    <input type="button" id="btn2" value="点击移除内容" />
    <hr>
    
    <div class="box">
    	这是一个div
    </div>
    <input type="button" value="点击改变" onclick="change()" name="btnBg"/>
    
    <script>
    var texts=document.getElementsByClassName('u-text')[0]; //通过className找到文本框
    var btn=document.getElementById('btn'); //通过id找到按钮
    var btn2=document.getElementById('btn2'); //通过id找到按钮
    
    btn.onclick=function(){
    	texts.setAttribute('value','我要改成我的内容'); //改变value
    	var con=texts.getAttribute('value');	//获取value
    	console.log(con);	
    }
    
    btn2.onclick=function(){
    	texts.removeAttribute('value'); //移除value
    }
    
    var box=document.getElementsByClassName('box')[0]; //通过class获取div
    var bgBtn=document.getElementsByName('btnBg')[0]; //通过name值获取按钮
    
    function change(){ //改变
    	box.style.backgroundColor='red';
    	box.style.color='white';
    	box.innerHTML='改变了颜色';
    	box.style.width='200px';
    }
    
    </script>
    
    </body>
    </html>
  • 相关阅读:
    iOS开发之Masonry框架源码解析
    iOS开发针对对Masonry下的FPS优化讨论
    React-native Android环境搭建
    Android中ListView使用总结
    Android开发布局方式
    轮播图
    大文件断点下载
    基于第三方库FMDB的数据库的二次封装
    md5加密
    AssignToObject文件(字典转模型、字典数组转模型数组)
  • 原文地址:https://www.cnblogs.com/hzhjxx/p/9679679.html
Copyright © 2011-2022 走看看