JavaScript【DOM操作】

xiaoxiao2021-02-27  465

1、概念

    JavaScript简称JS,是运行在浏览器端的一门脚本语言。其代表行为(网页界面和用户交互),用于响应用户操作。一开始主要用来做浏览器端验证,但是现在功能已经不止于此。     所谓的脚本语言就是指:代码不需要编译,可以直接运行,并且读入一行,运行一行。

特点:     弱类型:声明时不需要指定类型     动态类型的语言:可以动态的分配类型     是解释型的语言,由浏览器的JavaScript引擎执行

2、编写的位置

需要写在script标签中:

<script type="text/javascript"> // JavaScript代码 </script>

可以引入外部的js文件:

<script type="text/javascript" src=""></script>

src为外部js文件的路径

3、变量的声明

不需要指定类型,通过var关键字声明,要告诉浏览器自己编写的是JavaScript代码。

类型的分配

首先需要声明变量;然后给变量赋值时,会分配类型;也可以重新给变量赋值,动态分配类型。

示例:

// 声明变量a var a; // 给变量a赋值为10【即数值型】 a = 10; // 弹出一个警告框 alert(a); // 10 // 重新将字符串复制给变量a【动态改变a的类型为字符型】 a = "abc"; alert(a); // abc

命名规范

字母,下划线(_),美元符号($)开头,推荐使用字母开头,大小写敏感。

4、函数

相当于Java中的方法 在JavaScript中,函数也被看作为一个对象,可以将一个函数的引用赋值给一个变量

函数的声明

通过function关键字 每一个语句都是用分号(;)隔开

有名函数

function 函数名 (形式参数1, 形式参数2){ };

不需要指定形参的类型

匿名函数

var 变量名 = function(){};

变量名就是函数名

函数的使用

通过函数名【有名函数】或接收函数的变量名【匿名函数】,外加小括号来调用函数 函数名(实参);

函数的特点

⑴ js函数的形参,不需要指定类型,即不需要使用var关键字 ⑵ js函数调用时,不会检查参数的个数和类型 ⑶ 当传入的参数和函数的参数个数不匹配时:     ⒈ 参数不够:使用null补充     ⒉ 参数过多:从前往后匹配使用

使用示例

【无参的匿名函数】

// 声明一个匿名函数,并用变量fun来接收 var fun = function(){ alert("我是匿名函数"); }; // 通过fun来调用函数 fun();

【有参的有名函数】

// 声明一个有名(sum)的有参的函数 // a和b不需要指定类型,所以没有写var function sum(a, b){ // 返回a+b的结果 return a + b; }; // 打印两个数值相加 alert(sum(3, 4.7)); // 7.7 // 打印数值和字符串相加 alert(sum("a", 2)); // a2 【字符串拼接】 // 打印数值和布尔类型相加 // true为1;false为0,和数字计算 alert(sum(false, 3)); // 3 alert(sum(true, 3)); // 4 // 打印形参个数不匹配的结果 // 少写参数 alert(sum(3)); // NaN 【Not A Number】 // 多写参数 alert(sum(1, 2, 3)); // 3 【会从前往后匹配使用】

5、对象

在JavaScript中,所有的对象都是Object类型

创建对象的方式

⑴ 通过new Object(); 来创建一个对象 ⑵ 直接创建并初始化对象 { }; 并在大括号中初始化属性和函数,属性或函数跟值用冒号(:)连接,多个属性或函数之间通过逗号(,)隔开

注意: ⑴ 对象的属性或函数,必须通过对象来调用 ⑵ 调用不存在的属性,返回结果为:undefined【未定义的】

使用示例

// ⑴ 通过new Object(),创建一个对象 var obj1 = new Object(); obj1.name = "张三"; obj1.age = 14; obj1.info = function(){ // 通过对象来调用 通过this关键字来调用【this代表调用这个函数的对象】 return "我是:" + obj1.name + ",年龄:" + this.age; }; alert(obj1.name); // 张三 alert(obj1.info());// 我是:张三,年龄:14 // 该对象没有此属性 alert(obj1.a); // undefined // ⑵ 直接创建并初始化对象 var obj2 = { name:"李四", age:16, info:function(){ return this.name + ", " + this.age; } }; alert(obj2.info());// 李四, 16

6、事件

事件即:用户和浏览器之间发生的交互

注意:需要给标签设置特定事件时,使用JS代码来给HTML标签指定事件,当特定的操作发生时,事件方法才会被浏览器调用

例如:通过js给按钮设置单击事件     三种方式:         ⑴ 每一个标签都有事件的属性: onclick,可以在属性值中直接使用js代码             但是这种方式的耦合度很高,基本不使用         ⑵ 在script标签内书写js代码             要写在所有的标签后面         ⑶ 在head标签中的script标签中书写js代码             但是如果直接写js代码,会报错:             Uncaught TypeError: Cannot set property ‘onclick’ of null             因为文档的加载方式是从上到下,执行js代码的时候,btn对象还没有,所以对象为空

        解决方法:让js代码在整个文档加载完成之后再执行         这时就需要调用window对象的onload函数。因为这个函数是当文档加载完成后,浏览器才调用

Tips:window对象:表示浏览器窗口

使用示例

<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title>添加点击事件</title> <script type="text/javascript"> /* 添加事件方式3,在头部标签中的script标签中写JS代码 需要调用window对象的onload函数 这样才能找到btn3按钮对象 */ window.onload = function(){ var btn3 = document.getElementById("btn3"); btn3.onclick = function(){ alert("Button 3"); }; }; </script> </head> <body> <!-- 添加事件方式1,通过标签的onclick属性来创建点击事件 这种方式耦合度较高,尽量不要用 --> <input type="button" value="按钮1" onclick="alert('我是按钮1');" /> <br /><br /> <button id = "btn2">按钮2</button> <br /><br /> <button id = 'btn3'>按钮3</button> <!-- 添加事件方式2,在所有的标签的下面添加JS代码 --> <script type="text/javascript"> var btn2 = document.getElementById("btn2"); btn2.onclick = function(){ alert("按钮2"); }; </script> </body> </html>

7、DOM

概念

    Document Object Model 文档对象模型     帮助我们在JS中查找标签对象,对标签进行增删改查,添加或修改属性,设置CSS样式等操作

    将整个文档当作一个对象,页面中所有的内容都是对象,都是document的后代对象。而对象操作标签(元素)很方便,属性和函数可以直接调用     缺点是:使用麻烦,浏览器兼容性差     因为浏览器解析网页有三个引擎:html、css、js引擎,每个浏览器的解析效果不同,所以在使用时需要判断是哪个浏览器     所以一般开发时都会使用第三方的JS库,例如jQuery等

    Document:代表整个 HTML 文档,可以用来访问页面中的所有元素

    Window对象表示一个浏览器窗口或一个框架。Window 对象是全局对象,所有的表达式都在当前的环境中计算。也就是说,要引用当前窗口根本不需要特殊的语法,可以把那个窗口的属性作为全局变量来使用。所以,可以只写document,而不必写 window.document

节点

节点:Node——构成HTML文档最基本的单元

节点分为三类: 元素节点:构成HTML文档最基本的HTML元素,对应HTML文档中的HTML标签 属性节点:元素的属性 文本节点:HTML标签中的文本内容

示例:

<font color="red">字体</font> 元素节点:所有的font标签,即:<font color="red">字体</font> 属性节点:font标签的属性,即:color="red" 文本节点:font标签的文本内容,即:字体

元素类型

父元素:只要有子元素的元素都是父元素 子元素:有上级元素的元素 祖先元素:父元素的更上级元素 后代元素:子元素的下级元素     例如: html是div的祖先元素                 div是html的后代元素 兄弟元素:在同一个层级内的元素     例如: head和body就是兄弟元素

常用的DOM对象属性

nodeName

返回节点的名称

nodeType

返回节点的类型

nodeValue

返回节点的值

innerHTML

获取或设置元素的文本内容 虽不是W3C标准,却被所有主流的浏览器支持     ① 读取元素内部HTML代码         元素对象.innerHTML     ② 修改元素内部HTML代码         元素对象.innerHTML=HTML代码

childNodes

返回元素的所有子节点。返回值类型为 [object NodeList]

Tips:对于集合或节点数组,可以调用length来获取长度,并使用for循环来遍历

注意:因为浏览器的兼容问题,DOM解析时会将空格、文本也解析成一个节点对象。所以该属性最好不要用

firstChild

返回元素的第一个子节点 注意:因为浏览器的兼容问题,DOM解析时会将空格、文本也解析成一个节点对象。所以该属性最好不要用

lastChild

返回元素的最后一个子元素 注意:因为浏览器的兼容问题,DOM解析时会将空格、文本也解析成一个节点对象。所以该属性最好不要用

parentNode

返回元素的父节点

previousSibling

返回元素的前一个兄弟节点 注意:因为浏览器的兼容问题,DOM解析时会将空格、文本也解析成一个节点对象。所以该属性最好不要用

nextSibling

返回元素的后一个兄弟节点 注意:因为浏览器的兼容问题,DOM解析时会将空格、文本也解析成一个节点对象。所以该属性最好不要用

value

返回或设置元素的value属性值

常用的DOM对象方法

getElementById

document.getElementById(String elementId); 返回带有指定 ID 的元素。查找一个元素

getElementsByTagName

document.getElementsByTagName(String tagname); 根据标签名查找元素。返回包含带有指定标签名称的所有元素的节点列表(集合/节点数组)。查找一组元素。返回值类型为[object HTMLCollection]

Tips:对于集合或节点数组,可以调用length来获取长度,并使用for循环来遍历

getElementsByName

document.getElementsByName(String elementName); 根据name属性值查询元素。一般是input元素或一组元素。返回值类型为[object HTMLCollection]

Tips:对于集合或节点数组,可以调用length来获取长度,并使用for循环来遍历

使用示例

<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title>DOM操作</title> <script type="text/javascript"> window.onload = function(){ // 根据标签名获取元素【返回一个集合】 var btns = document.getElementsByTagName("button"); // 获取节点类型 // alert(btns); // [object HTMLCollection] // 因为整个页面中只有一个button,所以取第一个 var btn = btns[0]; // alert(btn); // [object HTMLButtonElement] // 修改按钮的onclick事件 btn.onclick = function(){ // 根据id获取节点 var fEle = document.getElementById("f1"); fEle.color = "red"; }; // // 根据name属性获取节点【返回一个集合】 var lists = document.getElementsByName("list"); // alert(lists); // [object HTMLCollection] // 因为整个页面中只有一个无序列表,所以取第一个 var list = lists[0]; // 得到ul的所有子节点【li】 var children = list.childNodes; // 获取集合的长度 var len = children.length; // 因为有的浏览器在解析DOM时,会将空格、字符也解析为节点 alert(len); // 7 【IE10 测试】 var first = list.firstChild; // 还是因为有的浏览器会将空格解析为节点 alert(first); // [object Text] 【IE10 测试】 var last = list.firstChild; alert(last); // [object Text] 【IE10 测试】 // // 获取id为li2的li标签 var li2 = document.getElementById("li2"); // 获取li的父节点【ul】 var parentEle = li2.parentNode; alert(parentEle); // [object HTMLUListElement] // 获取li的前一个兄弟节点 var preEle = li2.previousSibling; // 还是因为有的浏览器会将空格解析为节点 alert(preEle); // [object Text] 【IE10 测试】 // 获取li的下一个兄弟节点 var nextEle = li2.nextSibling; alert(nextEle); // [object Text] 【IE10 测试】 // var hEle = document.getElementsByTagName("h1")[0]; // 获取元素的文本内容 alert(hEle.innerHTML); // 这是1级标签 hEle.innerHTML = "修改!"; var fEle = document.getElementById("f1"); alert(fEle.innerHTML); // 我是font标签 // 节点的名称 alert(fEle.nodeName); // FONT // 节点的类型 alert(fEle.nodeType); // 1 // 节点的值 alert(fEle.nodeValue); // null var txtEle = document.getElementById("txt"); // 获取input标签的value属性值 var typeEle = txtEle.value; alert(typeEle); // 修改input标签的value属性值 txtEle.value = "txt"; }; </script> </head> <body> <h1>这是1级标签</h1> <font id="f1">我是font标签</font><br /><br /> <button>让上面的font标签文字变红色</button><br /><br /> <ul name="list"> <li>列表项1</li> <li id="li2">列表项2</li> <li>列表项3</li> </ul> <input type="text" id="txt" value="文本框" /> </body> </html>
转载请注明原文地址: https://www.6miu.com/read-510.html

最新回复(0)