JavaScript函数和BOM及DOM编程(详细总结-无尿点)

news/2024/11/15 0:14:19/

JavaScript函数和BOM及DOM编程(详细总结-无尿点)

  • javascript 函数
    • 一、javascript函数
      • 1.1 概述
      • 1.2 常见的系统函数
        • 1.2.1 eval
        • 1.2.2 parseInt
        • 1.2.3 parseFloat
        • 1.2.1 isNaN
      • 1.3 自定义函数
        • 1.3.1 声明函数
        • 1.3.2 函数参数
        • 1.3.3 return 返回值
        • 1.3.4 不定参数传递
        • 1.3.5 函数中调用函数
        • 1.3.6 匿名函数
        • 1.3.7 将函数当做参数
        • 1.3.8 函数的调用方式
        • 1.3.9 内置函数对象
  • BOM基本编程
    • 二、BOM编程
      • 2.1 BOM基本介绍
      • 2.2 BOM 的构成
      • 2.3 window
        • 2.3.1 窗口加载事件
        • 2.3.2 open()和close()
          • open()
          • close()
        • 2.3.3 定时器
          • 2.3.3.1 setTimeout() 定时器
          • 2.3.3.2 停止 setTimeout() 定时器
          • 2.3.3.3 setInterval() 定时器
          • 2.3.3.4 停止 setInterval() 定时器
      • 2.4 location
        • 2.4.1 location 对象属性及方法
        • 2.4.2 案例
      • 2.5 history
    • 三、内置对象
      • 3.1 Math数学对象
      • 3.2 Date 日期对象
      • 3.3 字符串对象
        • indexOf(), lastIndexOf() 查找字符位置
        • charAt() 按索引返回字符串
        • concat() 拼接字符串
        • substr() 按长度截取字符串
        • slice() 截取字符串
        • substring() 截取字符串
        • replace() 替换字符串
        • toUpperCase(), toLowerCase() 大小写转换
  • DOM基本编程
    • 四、DOM基本介绍
      • 1.1 什么是DOM?
      • 1.2 DOM树(家族谱)
    • 五、查找 HTML DOM 元素[标签,属性,文本内容]
      • 2.1 getElementByID()
      • 2.2 getElementsByTagName()
      • 2.3 getElementsByName()
      • 2.4 通过HTML5新增的方法获取
      • 2.5 获取特殊元素(body、html)
    • 六、改变 HTML 元素【内容】
      • 3.1 element.innerHTML
      • 3.2 element.innerText
      • 3.3 element.attribute 改变元素属性值
      • 3.4 element.setAttribute 改变元素属性值
      • 3.5 element.hasAttribute
      • 3.6 element.removeAttribute
      • 3.7 style.property 修改样式
    • 案例
      • 图片切换
      • 全选功能
  • DOM编程进阶
    • 一、DOM节点操作基本介绍
      • 1.1 为什么学习节点操作?
      • 1.2 节点概述
    • 二、节点层级
      • 2.1 父级节点
      • 2.2 子节点
      • 2.3 兄弟节点
    • 三、节点操作
      • 3.1 创建节点
      • 3.2 添加节点
      • 3.3 删除节点
      • 3.4 复制节点(克隆节点)
      • 3.5 三种创建元素的区别
    • 四、javascript之表格对象
      • 4.1 HTML DOM Table 对象
        • 4.1.1 Table 对象
        • 4.1.2 Table 对象集合
        • 4.1.3 Table 对象方法
      • HTML DOM td/th 对象
        • td 对象
        • th 对象
        • td/th 对象属性
      • HTML DOM tr 对象
        • tr 对象
        • tr 对象集合
        • tr 对象属性
        • tr 对象方法

javascript 函数

一、javascript函数

1.1 概述

  • 函数可以把代码封装起来,并且可以重复调用,完成特定功能的代码块
  • 一个 JavaScript 函数用function关键字定义,后面跟着函数名和圆括号。
<script>// 声明函数function 函数名(){// 函数内部代码,又称为函数体}// 调用函数
函数名();  
</script>
  • 函数:系统函数自定义函数

1.2 常见的系统函数

  • eval
  • parseInt
  • parseFloat
  • isNaN

1.2.1 eval

  • javascript中eval函数的作用是用于计算一个字符串,并将其作为脚本代码执行。
eval(string)
eval("x=10;y=20;document.write(x*y)") //返回200
document.write(eval("2+2")) //返回4var x=10document.write(eval(x+17)) //返回27

1.2.2 parseInt

parseInt(变量名);
  • 作用:从一个字符串提取整数
  • 提取规则:如果字符串第一个字符不是数字,就会返回NaN,它会遇到非数字就停止提取。

1.2.3 parseFloat

parseFloat(变量名);
  • 作用:从一个字符串提取小数
  • 提取规则:如果字符串第一个字符不是数字,就会返回NaN,它如果遇到除第一个以外的非数字就会停止提取。

1.2.1 isNaN

  • 如果是NaN就返回true,如果不是的就是false
  • 作用:先将一个变量的数据类型自动的转换为Number 如果是NaN就会得到true,如果是一个数字就得到false。
document.write(isNaN(5-2)); //返回falsedocument.write(isNaN(0)); //返回falsedocument.write(isNaN("Hello")); //返回true

1.3 自定义函数

1.3.1 声明函数

// 声明函数
function 函数名(){// 函数内部代码,又称为函数体
}// 调用函数
函数名();  

例:将1~100 累加封装成函数

function sum(){var sum = 0;for(var i=1; i<=100; i++){sum = sum+i;}console.log(sum);
}
sum();

1.3.2 函数参数

function 函数名(形参1, 形参2){// 函数体
}
函数名(实参1, 实参2);

函数调用参数实例:

function cook(arg){console.log(arg);
}
cook('嗨害嗨');
  • 如果调用函数的时候,实参个数大于形参,则只会以形参个数为准
  • 如果调用函数的时候,实参个数小于形参,未使用的形参值为 undefined

1.3.3 return 返回值

函数执行完毕后,只完成里边的代码,如果我们想要获取到函数运行中产生的数据,就需要用到返回值。

function getResult(){return 666;
}
console.log(getResult());
  • return 会终止函数并只会返回一个值,返回的是最后一个值

  • 如果函数没有 return 则会返回 undefined

1.3.4 不定参数传递

function test(){console.log(arguments);
}
test(1,2,3,4,5);// 输出结果
[1, 2, 3, 4, 5, callee: ƒ, Symbol(Symbol.iterator): ƒ]

伪数组:

  1. 具有数组 length 属性

  2. 按照索引方式进行存储

  3. 它没有真正数组的一些方法: pop(), push()

1.3.5 函数中调用函数

function test1(){console.log('test1');
}function test2(){test();console.log('test2');
}test2();

1.3.6 匿名函数

匿名函数没有名字

function(){// 代码块
}

调用匿名函数:

用小括号的方法实现函数的自调用,注意,这种调用方法只能调用一次

(function(){console.log('hello world');
})();

还可以将匿名函数赋值给一个变量,当给这个变量加上() 的时候,就相当于调用了这个函数

fn = function (x, y) {return x + y;
};
console.log(fn(1, 2));

1.3.7 将函数当做参数

var f1 = function () {return 100;
};
var f2 = function (fun) {console.log(f1());
};
f2(f1);// 输出结果
100

1.3.8 函数的调用方式

  • 直接调用方式
  • 函数内调用函数方式
  • 事件属性调用
  • 匿名函数通过变量调用
//直接调用方式
function a(){}
a();//函数内调用函数方式
function a(){}
function b(){a();
}//事件属性调用
function a(){}
<button onclick = "a();">点击</button>//匿名函数通过变量调用
var sb = function(){}
console.log(sb);

1.3.9 内置函数对象

var calSum3 = new Function('num1', 'num2', 'return num1 + num2');
calSum3(1,2)

BOM基本编程

二、BOM编程

2.1 BOM基本介绍

  • BOM(Browser Object Model)即浏览器对象模型,它提供了独立于内容而与浏览器窗口进行交互的对象,其核心对象是 window。
  • BOM 由一系列相关的对象构成,并且每个对象都提供了很多方法与属性。
  • BOM 缺乏标准,JavaScript 语法的标准化组织是 ECMA,DOM 的标准化组织是 W3C,BOM 最初是Netscape 浏览器标准的一部分。

2.2 BOM 的构成

BOM 比 DOM 更大,它包含 DOM。

  • window 对象,是 JS 的最顶层对象,其他的 BOM 对象都是 window 对象的属性;
  • document 对象,文档对象;
  • location 对象,浏览器当前URL信息;
  • navigator 对象,浏览器本身信息;
  • screen 对象,客户端屏幕信息;
  • history 对象,浏览器访问历史信息;

2.3 window

window 对象是浏览器的顶级对象 它具有双重角色。

它是 JS 访问浏览器窗口的一个接口。

它是一个全局对象。定义在全局作用域中的变量、函数都会变成 window 对象的属性和方法。

在调用的时候可以省略 window,前面学习的对话框都属于 window 对象方法,如 alert()、prompt() 等。
点击跳转: JavaScript初学者基础入门

2.3.1 窗口加载事件

在javascript的执行机制中,代码的执行是按照从上往下的顺序执行的,所以如果我们要给一个按钮添加点击事件,只能先设置按钮,然后获得按钮在进行操作

<body><button>点击</button><script>var btn = document.querySelector('button');btn.onclick = function(){alert('您刚点击了一下!')}</script>
</body>

如果我们想要把绑定的点击事件放置到页面前面,很明显是无法操作的。那应该怎么办呢?这个时候就可以通过我们的窗口加载事件来完成。

window.onload 就是窗口 (页面)加载事件,当文档内容完全加载完成会触发该事件(包括图像、脚本文件、CSS 文件等), 就调用的处理函数。

window.onload = function(){}
//或者 
window.addEventListener("load",function(){});

需要注意的是:

  • 有了 window.onload 就可以把 JS 代码写到页面元素的上方,因为 onload是等页面内容全部加载完毕,再去执行处理函数。
  • window.onload 传统注册事件方式 只能写一次,如果有多个,会以最后一个 window.onload 为准。
  • 如果使用 addEventListener 则没有限制。

2.3.2 open()和close()

open()
  • open() 方法可以查找一个已经存在或者新建的浏览器窗口。
window.open([URL], [窗口名称], [参数字符串])
/*
参数说明:
1.URL:可选参数,在窗口中要显示网页的网址或路径。如果省略这个参数,或者它的值是空字符串,那么窗口就不显示任何文档。
2.窗口名称:可选参数,被打开窗口的名称。
(1)该名称由字母、数字和下划线字符组成。
(2)"_top"、"_blank"、"_self"具有特殊意义的名称。_blank:在新窗口显示目标网页_self:在当前窗口显示目标网页_top:框架网页中在上部窗口中显示目标网页
(3)相同 name 的窗口只能创建一个,要想创建多个窗口则 name 不能相同。
(4)name 不能包含有空格。参数字符串:可选参数,设置窗口参数,各参数用逗号隔开。
*/

//例1:打开http://www.baidu.com网站,大小为300px * 200px,无菜单,无工具栏,无状态栏,有滚动条窗口:
<script type="text/javascript"> window.open('http://www.baidu.com','_blank','width=300,height=200,menubar=no,toolbar=no, status=no,scrollbars=yes')
</script>//例2:打开http://www.baidu.com网页,将在新窗体中打开,宽为600,高为400,距屏顶100像素,屏左0像素。当点击按钮时,打开新窗口。
<!DOCTYPE HTML>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>window.open</title>
<script type="text/javascript">function Wopen(){window.open('http://www.baidu.com','_blank','width=600,height=400,top=100,left=0');}
</script>
</head>
<body><input name="button" type="button" onClick="Wopen()" value="点击我,打开新窗口!" / >
</body>
</html>

运行结果

close()
  • close()关闭窗口
window.close();//关闭本窗口
<窗口对象>.close();//关闭指定窗口
<script type="text/javascript">var mywin=window.open('http://www.baidu.com'); //将新打的窗口对象,存储在变量mywin中mywin.close();
</script>

2.3.3 定时器

  • setTimeout
  • setInterval
  • clearInterval
  • clearTimeout
2.3.3.1 setTimeout() 定时器
window.setTimeout(调用函数 [,延迟的毫秒数]);// 该定时器在定时器到期后执行调用函数
注意:
1-window 可以省略
2-这个调用函数可以直接写函数,或者写函数名或者采取字符串 ‘函数名()’ 三种形式
3-延迟的毫秒数省略默认为 0,如果写必须是毫秒
4-因为定时器可能有很多,所以我们经常给定时器赋值一个标识符
2.3.3.2 停止 setTimeout() 定时器
window.clearTimeout(timeoutID)// 取消了先前通过调用 setTimeout() 建立的定时器
注意:
1-window 可以省略
2-里面的参数就是定时器的标识符
<script>setTimeout(function() {console.log('时间到了');}, 2000);function callback() {console.log('爆炸了');}var timer1 = setTimeout(callback, 3000);var timer2 = setTimeout(callback, 5000);// setTimeout('callback()', 3000); // 我们不提倡这个写法
</script>
2.3.3.3 setInterval() 定时器
window.setInterval(回调函数 [,间隔毫秒数]);// 重复调用一个函数,每个这个时间,就去调用一次回调函数
注意:
1-window 可以省略
2-这个调用函数可以直接写函数,或者写函数名或者采取字符串‘函数名()’三种形式
3-.间隔的毫秒数省略默认是 0,如果写,必须是毫秒,表示每隔多少毫秒就自动调用这个函数
4-因为定时器可能有很多,所以我们经常给定时器赋值一个标识符
5-第一次执行也是间隔毫秒数之后执行,之后每隔毫秒数就执行一次
2.3.3.4 停止 setInterval() 定时器
window.clearInterval(intervalID)// 取消了先前调用 setInterval() 建立的定时器
注意:
1-window 可以省略
2-里面的参数就是定时器标识符

案例:发送短信验证按钮60秒等待效果

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8"><title>Document</title>
</head><body>手机号码: <input type="number"> <button>发送</button><script>// 按钮点击之后,会禁用 disabled 为true // 同时按钮里面的内容会变化, 注意 button 里面的内容通过 innerHTML修改// 里面秒数是有变化的,因此需要用到定时器// 定义一个变量,在定时器里面,不断递减// 如果变量为0 说明到了时间,我们需要停止定时器,并且复原按钮初始状态var btn = document.querySelector('button');var time = 3; // 定义剩下的秒数btn.addEventListener('click', function() {btn.disabled = true;var timer = setInterval(function() {if (time == 0) {// 清除定时器和复原按钮clearInterval(timer);btn.disabled = false;btn.innerHTML = '发送';} else {btn.innerHTML = '还剩下' + time + '秒';time--;}}, 1000);})</script>
</body></html>

2.4 location

  • window 对象给我们提供了一个 location 属性用于获取或设置窗体 URL,并且可以用于解析 URL因为这个属性返回的是一个对象,所以我们将这个属性也称为 location 对象

2.4.1 location 对象属性及方法

location对象属性和方法返回值
location.href获取或者设置整个 URL
location.reload()重新加载当前页面,相当于刷新,如果参数为 true,强制刷新

2.4.2 案例

<div>5秒后会自动跳转页面</div>
<script>var time = 5;var div = document.querySelector('div');setInterval(function() {if (time == 0) {location.href = '#';} else {div.innerText = time + '秒后会自动跳转页面'time--;}}, 1000)
</script>

2.5 history

  • 与浏览器的历史记录进行交互,该对象包含用户访问过的 URL
history对象方法作用
back()可以后退
forward()前进功能
go(n)前进后退功能,参数如果是1,前进1个页面,如果是-1,后退一个页面

案例说明:模拟导航前进与后退

<!DOCTYPE html>
<html><head><meta charset="utf-8"><title></title></head><body><h1>这是网站的首页</h1><ul><li><a href="history_1.html">1</a></li><li><a href="history_2.html">2</a></li><li><a href="history_3.html">3</a></li></ul><button onclick="aa()">前进</button><button onclick="bb()">后退</button><script type="text/javascript">// 历史记录 history// go(数字)  back()  forward();function aa(){window.history.forward();}function bb(){window.history.back();window.history.go(-1);}</script></body>
</html>

实例

三、内置对象

内置对象是 JS 内部已经做好的对象,方便用户调用

3.1 Math数学对象

console.log(Math.PI);
console.log(Math.max(1,2,3,45));  // 取多个值中的最大数
Math.min(1,2,3);  //取多个值中最小的数
Math.floor(3.4);  // 向下取整 3
Math.ceil(3.4);  // 向上取整 4
Math.round(1.1);  // 四舍五入
Math.abs(-3);  // 取绝对值 3
Math.pow(10,2)  // 10的2次方
Math.sqrt(100)  // 开平方
Math.random();  // 生成0~1之间的随机小数 [0,1) === 左闭右开区间
// 生成一个区间的随机整数
function getRandom(min, max){return Math.floor(Math.floor(Math.random() * (max - min +1)) + min;
}// 原理:
0 ~ 100
Math.random() * 100  // 乘100提升范围100~200
Math.random() * 100 + 100  // 加100提升基数0~200
Math.random() * (300-100)100~300
Math.random() * (300-100) + 100

3.2 Date 日期对象

Date 是一个构造函数,需要使用 new 来创建对象

var date = new Date();
console.log(date);  // Wed Apr 21 2021 19:34:46 GMT+0800
date.getFullYear();  // 返回当前年份
date.getMonth();  // 返回的月份小1月
date.getDate();  // 返回几号
date.getDay();  // 返回周几,周一是1,周日是0
date.getHours(); // 返回小时
date.getMinutes(); //返回分钟
date.getSeconds(); //返回秒// 获得总毫秒数从1970年1月1日(时间戳)
date.valueOf();
date.getTime();  // H5 浏览器可以直接用 date 中的方法获取时间戳
var now = Date.now()// 不支持 HTML5 的浏览器可以使用下面的方式获得时间戳
var now = +new Date()

获得指定日期对象

var date = new Date(1619005441955);  // 传入时间戳
var date = new Date(2015, 4, 1);  // 传入年、月、日(月份从0开始计数)
var date = new Date("2020-5-10");  // 字符串方式传入年-月-日

转换成字符串

toString()

例:将时间对象整理为 "2020-04-15 11:47:30"的格式

      // 2020-04-21 20:01:01function time() {var now = new Date();var year = now.getFullYear();var month = now.getMonth();var date = now.getDate();var hour = now.getHours();var min = now.getMinutes();var sec = now.getSeconds();// 利用三元运算符month = month < 10 ? "0" + month : month;date = date < 10 ? "0" + date : date;hour = hour < 10 ? "0" + hour : hour;min = min < 10 ? "0" + min : min;sec = sec < 10 ? "0" + sec : sec;return ("" +year +"-" +month +"-" +date +" " +hour +":" +min +":" +sec);}console.log(time());

3.3 字符串对象

包装对象

字符串、数字、布尔值这三种原始类型的值,为什么会有对象调用方法?这是因为 JS 引擎会自动将原始类型的值转换为包装对象,使用之后会立即销毁。

  • String 对象
  • Number 对象
  • Boolen 对象
str = '123';// 内部处理
var temp = new String('123');  // 实际上是将字符串对象化
str = temp;  // 然后将临时变量传递给str
temp = null;  // 销毁临时变量
str.length();  // 这时候 str 已经是对象了,可以调用方法

字符串不可变

str = '1';
str = '2';

看似 str 变量从1变成了2,其实并不是 str 的变量改变,而是系统在内存中又开辟了一个空间存放数值2,然后将 str 的地址引向数据,但是原数据1还是存放在内存当中的。

indexOf(), lastIndexOf() 查找字符位置

和数组类似,可以将字符串也看做数组,第一个字符索引为0。

返回值:

查找的字符串 searchValue 的第一次出现的索引,如果没有找到,则返回 -1

// str.indexOf('要查找的字符', [起始的位置])
var str = '白日依山尽';
console.log(str.indexOf('山'));
console.log(str.lastIndexOf('山'));

例:求某个字符出现的次数和位置

var str = "adfajiwerasdfjklweasdfawer";
var index = str.indexOf("a");
var num = 0;
while (index != -1) {console.log(index);num++;index = str.indexOf("a", index + 1);
}
console.log(num);

charAt() 按索引返回字符串

var str = 'andy';
str.charAt(3);  // 返回index位置的字符
str.charCodeAt(3);  // 返回 index 位置的 ASCII 码
str[3];  // 获取指定位置处字符

例:遍历字符串中字符

var str = "andy";
for (var i = 0; i < str.length; i++) {console.log(str.charAt(i));
}

例:统计字符串中出现次数最多的字符

var str = "tqwerasdfwerqiuyasdfggyweasdf";
var o = {};
for (var i = 0; i < str.length; i++) {var chars = str.charAt(i); // 通过 charAt() 获取字符串每个字符if (o[chars]) {// 判断如果没有该字符属性,则初始化1,有则+1o[chars]++;} else {o[chars] = 1;}
}var max = 0;
var max_str = "";
for (var k in o) {// k 是键名// o[k] 是值if (o[k] > max) {max = o[k];max_str = k;}
}
console.log(max_str);
console.log(max);// 输出结果
w
3

concat() 拼接字符串

将一个或多个字符串与原字符串连接合并,形成一个新的字符串并返回。

var str1 = "a";
var str2 = "b";
var str3 = "c";
var str4 = str1.concat(str2, str3);
console.log(str4);// 输出结果
abc

substr() 按长度截取字符串

语法:

substr(start, length);  // 从start索引位置开始,length 为取的个数,不输入 length,截取到末尾
var anyString = "Mozilla";
console.log(anyString.substr(1,4));// 输出结果
ozil

slice() 截取字符串

语法:

slice(start, end);  // 从 start 位置开始,截取到 end 位置(不包括end)。不输入 end 默认截取到结尾
var anyString = "Mozilla";
console.log(anyString.slice(1, 4));// 输出结果
ozi

如果是负数索引,从 -1 开始计数

substring() 截取字符串

substring 提取从 indexStart 到 indexEnd(不包括)之间的字符。slice() 用法与 substring() 用法类似,

  • slice() 方法也可以使用在数组中,并且支持负数索引

  • substring() 只可以在字符串中使用,不支持负数索引

  • 如果 indexStart 等于 indexEndsubstring 返回一个空字符串。

  • 如果省略 indexEndsubstring 提取字符一直到字符串末尾。

  • 如果任一参数小于 0 或为 NaN,则被当作 0。

  • 如果任一参数大于 stringName.length,则被当作 stringName.length

  • 如果 indexStart 大于 indexEnd,则 substring 的执行效果就像两个参数调换了一样。

语法:

str.substring(indexStart[, indexEnd])
var anyString = "Mozilla";
console.log(anyString.substring(-2,3));// 输出结果
Moz

replace() 替换字符串

replace() 方法用于在字符串中用一些字符替换另一些字符,或替换一个与正则表达式匹配的子串。

语法:

stringObject.replace(regexp/substr,replacement)
  • 字符串替换只替换第一个匹配项目
  • 批量替换需要使用正则

例:

var anyString = "Hello World";
console.log(anyString.replace("World", "Javascript"));// 输出
Hello Javascript

toUpperCase(), toLowerCase() 大小写转换

console.log("aBc".toUpperCase());
console.log("Abc".toLowerCase());// 输出结果
ABC
abc

DOM基本编程

四、DOM基本介绍

1.1 什么是DOM?

文档对象模型(Document Object Model,简称DOM),是W3C组织推荐的处理可扩展标记语言(HTML或XML)的标准编程接口

W3C已经定义了一系列的DOM接口,通过这些DOM接口可以改变网页的内容、结构和样式。

1.2 DOM树(家族谱)

当网页被加载时,浏览器会创建页面的文档对象模型(Document Object Model),HTML DOM 模型被结构化为对象树:

HTML DOM 是 HTML 的标准对象模型和编程接口。它定义了:

  • 作为对象的 HTML 元素
  • 所有 HTML 元素的属性
  • 访问所有 HTML 元素的方法
  • 所有 HTML 元素的事件

文档:一个页面就是一个文档,DOM中使用 document 表示

网页----框架标记(frameset iframe)–1个页面中包含了多个文档document对象

元素:页面中所有的标签都是元素,DOM中使用element表示

节点:网页中所有内容都是节点(标签、属性、文本、注释等),DOM中使用node表示

注意事项:DOM把以上内容都看做是对象

五、查找 HTML DOM 元素[标签,属性,文本内容]

HTML DOM 能够通过 JavaScript 进行访问(也可以通过其他编程语言)。在 DOM 中,所有 HTML 元素都被定义为对象。我们可以通过 Javascript 对这些对象操作,改变 HTML 元素的内容。

  • getElementById()
  • getElementsByTagName()
  • getElementsByClassName()
  • querySelector()
  • querySelectorAll()

2.1 getElementByID()

使用getElementById()方法可以获取带有ID的元素对象

<div id="oDiv">zking zz is a nice man</div>
<script type="text/javascript">var oDiv = document.getElementById('oDiv');console.log(oDiv)
</script>

【案例】–图片切换

<!DOCTYPE html>
<html><head><meta charset="utf-8" /><title>图片切换</title></head><body><img src="img/c2.jpg" alt="" id="imgOne" width="200px" height="200px"><button onclick="change()">切换图片</button><!-- 创建js --><script>function change() {var img = document.getElementById("imgOne");img.src = "img/小黑子1.gif";}</script></body>
</html>

案例展示
图片切换

2.2 getElementsByTagName()

使用getElementsByTagName()方法可以返回带有指定标签名的对象集合。

document.getElementsByTagName('标签名')

注意事项:

  • 因为得到的是一个对象的集合,所以想要操作里面的元素就需要遍历
  • 得到元素对象是动态

还可以获取某个元素(父元素)内部所有指定标签名的子元素。

element.getElementsByTagName('标签名');

注意:父元素必须是单个对象(必须指明是哪一个元素对象)。获取的时候不包括父元素自己。

2.3 getElementsByName()

getElementsByName() 方法可返回带有指定名称的对象的集合。

getElementsByName() 方法可返回带有指定名称的对象的集合。

该方法与 getElementById() 方法相似,但是它查询元素的 name 属性,而不是 id 属性。

另外,因为一个文档中的 name 属性可能不唯一(如 HTML 表单中的单选按钮通常具有相同的 name 属性),所有 getElementsByName() 方法返回的是元素的数组,而不是一个元素。

【案例】使用该方法得到所有的input标签然后打印value值

<body><input name="radio" type="radio" value=""><input name="radio" type="radio" value=""><input name="radio" type="radio" value="rap">rap<input name="radio" type="radio" value="篮球">篮球<button onclick="change()">获取value值</button><!-- 创建js --><script>function change() {var name = document.getElementsByName("radio");for(var i = 0 ; i<name.length;i++){console.log(name[i].value);}}</script></body>

在这里插入图片描述

2.4 通过HTML5新增的方法获取

//根据类名返回元素对象集合
document.getElementsByClassName('类名');
//根据指定选择器返回第一个元素对象 切记 里面的选择器需要加符号
document.querySelector('选择器');
//根据指定选择器返回
document.querySelectorAll('选择器');

2.5 获取特殊元素(body、html)

获取body元素

document.body

获取html元素

document.documentElement;

六、改变 HTML 元素【内容】

javascript的DOM操作可以改变网页内容、结构和样式,我们可以利用DOM操作元素来改变元素里面的内容、属性等操作。注意以下都是属性。

方法描述
element.innerHTML = new html content改变元素的 HTML 内容
element.innerTEXT = new text改变元素的文本内容
element.attribute = new value改变 HTML 元素的属性值
element.setAttribute(attribute, value)改变 HTML 元素的属性值
element.hasAttribute(attribute)判断元素是否有该属性
element.removeAttribute(attribute)删除元素属性
element.style.property = new style改变 HTML 元素的样式

3.1 element.innerHTML

元素属性 innerHTML 就是元素的 HTML 代码,当查找到元素后,可以对其 innerHTML 属性进行重新赋值修改。

<div><h1>Hello World</h1>
</div>
<script>var h1 = document.querySelector("div");// 将原本的div里边的所有HTML内容更改,如果没有子元素,InnerHTML 就会修改该元素下的 Text 内容h1.innerHTML = "<h2>2020-05-05</h2>";
</script>// 输出结果
2020-05-05

3.2 element.innerText

<h1>Hello World</h1>
<script>var h1 = document.querySelector("h1");// 只更改文本,HTML 不解析,同时去除空格和换行h1.innerText = "<h2>2020-05-05</h2>    ABC";
</script>// 输出结果
<h2>2020-05-05 ABC</h2>

3.3 element.attribute 改变元素属性值

这里的 attribute 是代词,具体要看元素有什么属性,比如 a 链接就有 href 属性,所以使用的时候需要用 element.href 来改变。

<div><a href="https://www.163.com">网址</a>
</div><script>var a = document.querySelector("a");a.href = "https://www.qq.com";
</script>

3.4 element.setAttribute 改变元素属性值

还可以通过 element.setAttribute 方法来改变元素属性值

element.setAttribute(attribute, value)
  • attribute:属性名

  • value:属性值

<div><a class="hightlight" href="https://www.163.com">网址</a>
</div><script>var a = document.querySelector("a");a.setAttribute("href", "https://www.qq.com");// 用 .属性方法更改 class 属性使用 className// 注意空格,这里是增加一个classa.className += " hidden";  // 用 setAttribute 更改 class 属性直接用 class// 也可以直接写上两个属性a.setAttribute("class", "hightlight hidden");
</script>

常用元素属性

  • innerText
  • innerHTML
  • src
  • href
  • id, alt, title

3.5 element.hasAttribute

通过 element.hasAttribute 判断元素是否有指定属性

<a href="index.php" data-index="1">123</a>
<script>
var d = document.querySelector("a");
// 返回 true
console.log(d.hasAttribute("href"));
</script>

3.6 element.removeAttribute

<a href="index.php" data-index="1">123</a>
<script>
var d = document.querySelector("a");
d.removeAttribute("data-index");
</script>

3.7 style.property 修改样式

使用元素中的 style 属性可以修改该元素的样式。如 a.style.fontSizea.style.display。修改的样式直接作用在行内CSS样式中,

  • 修改样式的属性名需要改写,将横杠从CSS属性名中去除,然后将横杠后第一个字母大写,如:background-color 写成 backgroundColor
  • 属性值都是字符串,设置时必须包括单位
<div><a href="https://www.163.com">网址</a>
</div><script>var a = document.querySelector("a");a.style.fontSize = "24px";
</script>
控制元素隐藏与显示
// visibility属性    visible	表示元素是可见的	hidden	表示元素是不可见的
// object.style.visibility="值"
// display属性			none	表示此元素不会被显示	block	表示此元素将显示为块级元素,此元素前后会带有换行符
// object.style.display="值"

例:Tongle 切换背景效果

  • 通过类名切换背景
  • 也可以通过 document.body.style.backgroundColor 属性切换背景颜色
<style>.cls {background-color: coral;}
</style>
<body><button>切换</button><script>var btn = document.querySelector("button");btn.addEventListener("click", function () {if (document.body.className == "") {document.body.className = "cls";} else {document.body.className = "";}});</script>
</body>

案例

图片切换

<!DOCTYPE html>
<html><head><meta charset="utf-8"><title>图片切换</title><script type="text/javascript">//数组的方式定义  保存所有的图片的名称var images = ["img/1.jpg","img/2.jpg","img/3.jpg","img/4.jpg","img/5.jpg"];var index = 0;//声明一个变量保存定时器var timer = null;//加载函数window.onload = function(){//获取图片标签   调用src重新赋值var oImg = document.querySelector("img");//封装一个函数 保存下一张的代码function next(){index++;if(index >= images.length){index = 0;//归0}oImg.src = images[index];//0 1 2 3 4console.log(index);}//手动点击下一张  进行切换var nextBtn = document.getElementById("nextBtn");//设置点击事件nextBtn.onclick = function(){next();};//手动点击上一张  进行切换var backBtn = document.getElementById("backBtn");//设置点击事件backBtn.onclick = function(){index--;if(index < 0){index = images.length-1;//归0}oImg.src = images[index];//0 1 2 3 4console.log(index);};//自动切换的按钮var autoBtn = document.getElementById("autoBtn");autoBtn.onclick = function(){window.clearInterval(timer);//设置定时器timer = window.setInterval(function(){next();},2000);};var closeBtn = document.getElementById("closeBtn");closeBtn.onclick = function(){window.clearInterval(timer);}};</script></head><body><!-- 调用src属性   对象.属性 --><img src="img/1.jpg" alt="" width="300" height="300"><hr><button id = "backBtn">上一张</button><button id="nextBtn">下一张</button><button id="autoBtn">自动切换图片</button><button id="closeBtn">关闭切换图片</button></body>
</html>

图片切换进阶

全选功能

<!DOCTYPE html>
<html><head><meta charset="utf-8"><title>复选框选中效果</title><style>table {text-align: center;}</style><script>// 全选函数function all_check() {// 获取所有复选框名字var name = document.getElementsByName("ic"); /* 返回一个数组 */for (var i = 0; i < name.length; i++) {// 判断全选框状态if (document.getElementById("count").checked == true) {//如果全选选中子选框就全选中name[i].checked = true;} else {name[i].checked = false;}}}// 复选框function single_check() {var name = document.getElementsByName("ic"); /* 返回一个数组 */// 定义一个变量来接收单选的数量var j = 0;for (var i = 0; i < name.length; i++) {if (name[i].checked == true) {j = j + 1;}}//判断选的数量是否等于整个选框的长度if (j == name.length) {document.getElementById("count").checked = true;} else {document.getElementById("count").checked = false;}}</script></head><body><table border="1" align="center" cellspacing="0" cellpadding="5"><tr><th><input id="count" type="checkbox" onclick="all_check()">全选</th><th colspan="3">产品名字</th><th>价格(元)</th><th>数量</th></tr><tr><td><input name="ic" type="checkbox" value="诺基亚" onclick="single_check()" /></td><td colspan="3">诺基亚N85手机</td><td>2589</td><td>6</td></tr><tr><td><input name="ic" type="checkbox" value="佳能" onclick="single_check()" /></td><td colspan="3">佳能IXUS95ISY数码相机</td><td>1865</td><td>5</td></tr><tr><td><input name="ic" type="checkbox" value="戴尔" onclick="single_check()" /></td><td colspan="3">戴尔新版SK8115键盘</td><td>60</td><td>56</td></tr><tr><td><input name="ic" type="checkbox" value="联想" onclick="single_check()" /></td><td colspan="3">联想折叠式笔记本电脑桌</td><td>59</td><td>10</td></tr><tr><td><input name="ic" type="checkbox" value="康佳" onclick="single_check()" /></td><td colspan="3">康佳32英寸液晶电视</td><td>2945</td><td>3</td></tr><tr><td><input name="ic" type="checkbox" value="九阳" onclick="single_check()" /></td><td colspan="3">九阳JYDX-78D五谷系列豆浆机</td><td>299</td><td>8</td></tr><tr><td colspan="6">删除选中的产品</td></tr></table></body>
</html>

全选按钮

DOM编程进阶

一、DOM节点操作基本介绍

1.1 为什么学习节点操作?

获取页面元素。

  • 利用DOM提供的方法获取元素
    • document.getElementById()
    • document.getElementsByTagName()
    • document.querSelector等
    • 逻辑性不强、繁琐
  • 利用节点层级关系获取元素
    • 利用父子兄弟节点关系获取元素
    • 逻辑性强,但兼容性差

1.2 节点概述

  • 网页中的所有内容都是节点(标签、属性、文本、注释等等),在DOM中,节点使用Node来表示。
  • HTML DOM树中的所有节点均可通过JavaScript进行访问,所有HTML元素(节点)均可被修改,也可以创建或删除。

一般的,节点至少拥有nodeType(节点类型)、nodeName(节点名称)和nodeValue(节点值)这三个基本属性

  • 元素节点 nodeType为1
  • 属性节点nodeType为2
  • 文本节点nodeType为3(文本节点包含文字、空格、换行等)

【总结】我们在实际开发中,节点操作主要操作的是"元素节点"。

二、节点层级

2.1 父级节点

利用DOM树可以把节点划分为不同的层级关系,常见的是父子兄层级关系

node.parentNode
  • parentNode属性可返回某节点的父节点,注意是最近的一个父节点
  • 如果指定的节点没有父节点则返回null

2.2 子节点

parentNode.childNodes(标准)

parentNode.childNodes返回包括指定节点的子节点的集合,该集合为即时更新的集合

注意:返回值里面包括了所有的子节点,包括元素节点,文本节点等。

如果想到获得里面的元素节点,则需要专门处理,所以我们一般不提倡使用childNodes

var ul = document.querySelector('ul');
for(var i = 0; i < ul.childNodes.lenth; i++) {if(ul.childNodes[i].nodeType == 1) {//ul.childNodes[i] 是元素节点console.log(ul.childNodes[i]);}}

重点掌握

parentNodes.children(非标准)

parentNodes.children是一个只读属性,返回所有的子元素节点,它只返回子元素节点,其余节点不返回(重点掌握)

虽然children是一个非标准,但是已经得到了各个浏览器的支持,因此放心使用

parentNode.firstChild

firstChild返回第一个子节点,找不到就返回null,同样,也是包含所有的节点

parentNode.lastChild

lastChild返回最后一个子节点吗,找不到则返回null,同样,也是包含所有的节点

parentNode.firstElementChild

firstElementChild返回第一个子元素节点,找不到则返回null

parentNode.lastElementChild

lastElementChild返回最后一个子元素节点,找不到则返回null

注意:后面两个方法有兼容性问题,IE9以上才支持

// 1.firstChild 第一个子节点 不管是文本节点还是元素节点
console.log(ol.firstChild);
console.log(ol.lastChild);// 2.firstelementChild 返回第一个元素节点
console.log(ol.firstElementChild);
console.log(ol.lastElementChild);

实际开发的写法 既没有兼容性问题还能返回第一个子元素

console.log(ol.children[0]);  
console.log(ol.children[ol.children.length-1]);

2.3 兄弟节点

所有节点

node.nextSibling

nextSibling返回当前元素的下一个兄弟节点,找不到则返回null,同样,也是包括所有节点

node.previousSibling

previousSiblin返回当前元素的上一个兄弟节点,找不到则返回null,同样,也是包括所有节点

特指元素节点

node.nextElementSibling

nextElementSibling返回当前元素下一个兄弟元素节点,找不到则返回null

node.previousElementSibling

previousElementSibling返回当前元素上一个兄弟节点找不到就返回null

注意:这两个方法有兼容性问题,IE9以上才支持

解决兼容性问题:自己封装一个兼容性函数
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-mb5dhJSD-1679726981831)(DOM编程进阶.assets/image-20230308215020915-16782834218011.png)]

三、节点操作

3.1 创建节点

document.createElement(‘tagName’);

document.createElement()方法创建由tagName指定的HTML元素。因为这些元素原先不存在是根据我们的需求动态生成的,所有我们也称为动态创建元素节点

var li = document.createElement('li');

3.2 添加节点

node.appendChild(child)

node.appendChild() 方法将一个节点添加到指定父节点的子节点列表末尾。类似于css里面的after伪元素

node.insertBefore(child,指定元素)
// 2.添加节点 node.appendChild(child)  node 父级  child子级
// 后面追加元素,类似数组中的push
var ul = document.querySelector('ul');
ul.appendChild(li);// 3.添加节点  node.insertBefore(child,指定元素);
var lili = document.createElement('li');
ul.insertBefore(lili,ul.children[0]);

3.3 删除节点

node.removeChild(child)

node.removeChild() 方法从DOM中删除一个子节点,返回删除的节点``

// 1.获取元素
var ul = document.querySelector('ul');
// 2.删除元素  node.removeChild(child);
ul.removeChild(ul.children[0]);

3.4 复制节点(克隆节点)

node.cloneNode()

node.cloneNode() 方法返回调用该方法的节点的一个副本。也称为克隆节点/拷贝节点

注意:

  • 如果括号参数为空或者为false,则是浅拷贝,即只是克隆复制节点本身,不克隆里面的子节点
  • 如果括号参数为true,则是深度拷贝,会复制节点本身以及里面所有的子节点
node.cloneNode(); //浅拷贝,不复制内容,只复制标签node.cloneNode(true); //深拷贝,复制内容、复制标签

3.5 三种创建元素的区别

  • document.write()
  • element.innerHTML
  • document.createElement()

区别

document.write是直接将内容写在页面的内容流,但是文档流执行完毕,则它会导致页面全部重绘

例:

var btn = document.querySelector('button');btn.onclick = function() {document.write('<div>臭猪</div>');} 

点击

页面重写了!!!

innerHTML是将内容写入某个DOM节点,不会导致页面全部重绘
innerHTML创建多个元素效率更高(不要拼接字符串,采取数组形式拼接),结构稍微复杂
createElement() 创建多个元素效率稍低一点点,但是结构更清晰
总结:不同浏览器,innerHTML效率要比creatElement高

var inner = document.querySelector('.inner');
var arr = [];for(var i=0;i<=100;i++) {arr.push('<a href="#">百度</a>');}
inner.innerHTML = arr.join('');

四、javascript之表格对象

在网页中我们可能会经常看到用表格做出来的东西,我们有时候可能要对表格进行操作,当然我们可以通过DOM获得表格对象后对其子节点进行操作,但是大家可能都知道有一种简单方法,那就是DOM中的文档对象,也就是获得表格对象后进而获得某个行对象或者某个单元格对象。

4.1 HTML DOM Table 对象

4.1.1 Table 对象

  • Table 对象代表一个 HTML 表格。
  • 在 HTML 文档中 标签每出现一次,一个 Table 对象就会被创建。

4.1.2 Table 对象集合

W3C: W3C 标准。

集合描述W3C
cells返回包含表格中所有单元格的一个数组。No
rows返回包含表格中所有行的一个数组。Yes

4.1.3 Table 对象方法

方法描述W3C
deleteRow()从表格删除一行。Yes
insertRow()在表格中插入一个新行。Yes

HTML DOM td/th 对象


td 对象

td 对象代表了 HTML 中数据单元。

在 HTML 表格中每个 标签都会创建一个 td 对象。


th 对象

th 对象代表了 HTML 标准中的表头单元。

HTML 中每个 标签都会创建一个 th 对象。


td/th 对象属性

W3C: W3C 标准。

属性描述W3C
abbr设置或返回单元格中内容的缩写版本。Yes
align已废弃。 设置或返回单元格内部数据的水平排列方式。D
axis设置或返回相关单元格的一个逗号分隔的列表。Yes
background已废弃。 设置或返回表格的背景图片。D
bgColor已废弃。 设置或返回表格的背景颜色D
cellIndex返回单元格在某行的单元格集合中的位置。Yes
ch设置或返回单元格的对齐字符。Yes
chOff设置或返回单元格的对齐字符的偏移量。Yes
colSpan单元格横跨的列数。Yes
headers置或返回 header-cell 的 id 值。Yes
height已废弃。 设置或返回数据单元的高度D
noWrap已废弃。 nowrap 属性规定表格单元格中的内容不换行。D
rowSpan设置或返回单元格可横跨的行数。Yes
vAlign设置或返回表格单元格内数据的垂直排列方式。Yes
width已废弃。设置或返回单元格的宽度。D

HTML DOM tr 对象


tr 对象

tr 对象代表了 HTML 表格的行。

HTML文档中出现一个 标签,就会创建一个tr对象。


tr 对象集合

W3C: W3C 标签。

集合描述W3C
cells返回表格行中所有元素的集合Yes

tr 对象属性

属性描述W3C
align已废弃。 设置或返回在行中数据的水平排列。D
bgColor已废弃。 设置或返回表格行的的颜色。D
ch设置或返回在行中单元格的对齐字符。Yes
chOff设置或返回在行中单元格的对齐字符的偏移量。Yes
height已废弃。设置或返回表格行的高度。使用 style.height 取代D
rowIndex返回该行在表中的位置。Yes
sectionRowIndexR返回在 tBody 、tHead 或 tFoot 中,行的位置。Yes
vAlign设置或返回在行中的数据的垂直排列方式。Yes

tr 对象方法

方法描述W3C
deleteCell()删除行中的指定的单元格。Yes
insertCell()在一行中的指定位置插入一个空的元素。Yes

在这里插入图片描述


http://www.ppmy.cn/news/522230.html

相关文章

虚拟与现实的距离——VR 产业链史上最全梳理收藏版本

VR 进入公众视线也不短了&#xff0c;很多人都感觉以后似乎会普及&#xff0c;但又总是这儿有问题&#xff0c;那儿有问题。去年&#xff0c;很多人讨论头显怎么不成熟&#xff0c;时隔一年&#xff0c;伴随着几大头显厂商消费者级产品的发售时间陆续确定&#xff0c;更多的人开…

2021年中国企业裁员浪潮,究竟需不需要被道德“审判”?

1990年&#xff0c;佳能照相机产线降落广东珠海。 巅峰时期&#xff0c;佳能珠海年销售额高达13亿美元&#xff0c;业务可涵盖镜片研磨到相机组装&#xff0c;拥有近万名员工。年轻女工居多&#xff0c;一度被称为“女儿国”。其生产的卡片数码相机&#xff0c;占据佳能全球卡…

图解敏捷教练和 ScrumMaster

课程介绍 在互联网时代快速变化的今天,传统管理方式已经失效并且逐渐被社会淘汰,我们需要全新的方法来适用于不同规模的团队。敏捷教练和 Scrum Master 是一种专业的职业。其职责是帮助团队和组织做到更好(本课程视 Scrum Master 和敏捷教练为同一职业的不同发展阶段)。敏…

2017年IT类公司世界500强企业及其简评

前言 笔者曾简单罗列过2016年IT类公司世界五百强&#xff0c;地址在&#xff1a; http://blog.csdn.net/wang7807564/article/details/70904156 感兴趣的读者可以对别阅读。 笔者在上述地址所罗列的IT类公司泛指大IT行业&#xff0c;包括互联网/有影响力的电信巨头/智能硬件…

Webots2021b和ROS2调试笔记21-07-29

所有在21-07-27中的问题&#xff0c;全部都得到解决了&#xff0c;结果如下&#xff1a; C:\ros_ws\webots_ros2>colcon build [1.903s] root DEBUG Using proactor: IocpProactor Starting >>> control_msgs Starting >>> controller_manager_msgs Start…

rtl8201以太网卡

一、常见网络接口 MII&#xff1a;支持10兆和100兆的操作&#xff0c;一个接口由14根线组成&#xff0c;它的支持还是比较灵活的&#xff0c;但是有一个缺点是因为它一个端口用的信号线太多。 RMII&#xff1a;是简化的MII接口&#xff0c;在数据的收发上它比MII接口少了一倍的…

Intel8251可编程串行扩展RS232串口

随着集成电路技术的发展&#xff0c;电子设计自动化&#xff08;EDA&#xff09;逐渐成为重要的设计手段&#xff0c;已经广泛应用于模拟与数字电路系统等许多领域。电子设计自动化是一种实现电子系统或电子产品自动化设计的技术&#xff0c;它与电子技术&#xff0c;微电子技术…

IEEE802

文章目录 概括介绍结构数据链路层逻辑链路控制层介质访问层 物理层 主要协议802.1802.2802.3802.4802.5802.11802.11 原始标准802.11i 无线安全方面补充 802.15 更多 概括介绍 IEEE 802 指IEEE标准中关于局域网和城域网的一系列标准。这一系列标准中的每一个子标准都由委员会中…