BOM和DOM的操作

时间:2022-09-20 17:38:39

  

  到目前为止,我们已经学过了JavaScript的一些简单的语法。但是这些简单的语法,并没有和浏览器有任何交互。也就是我们还不能制作一些我们经常看到的网页的一些交互,我们需要继续学习BOM和DOM相关知识。

  JavaScript分为 ECMAScript,DOM,BOM。

一、BOM

  Browser Object Model:浏览器对象模型,它使 JS有能力与浏览器进行对话。

1、window对象

①window.innerHeight    浏览器窗口的内部高度
②window.innerWidth 浏览器窗口的内部宽度
③window.open() 打开新窗口
④window.close() 关闭当前窗口

BOM和DOM的操作

2、window的子对象

①location对象

  window.location 对象用于获得当前页面的地址 (URL),并把浏览器重定向到新的页面。

  常用属性和方法:

location.href         获取URL
location.href="URL" 跳转到指定页面
location.reload() 重新加载页面

②弹出框

可以在 JavaScript 中创建三种消息框:警告框、确认框、提示框。

  警告框:经常用于确保用户可以得到某些信息。当警告框出现后,用户需要点击确定按钮才能继续进行操作。

  确认框:用于使用户可以验证或者接受某些信息。当确认框出现后,用户需要点击确定或者取消按钮才能继续进行操作。

  提示框:经常用于提示用户在进入页面前输入某个值。当提示框出现后,用户需要输入某个值,然后点击确认或取消按钮才能继续操纵。

BOM和DOM的操作

③计时相关

通过使用 JavaScript,我们可以在一定时间间隔之后来执行代码,而不是在函数被调用后立即执行。我们称之为计时事件。

  setTimeout()

语法:
var t=setTimeout("JS语句",毫秒) setTimeout() 方法会返回某个值。在上面的语句中,值被储存在名为 t 的变量中。
假如你希望取消这个 setTimeout(),你可以使用这个变量名来指定它。 setTimeout() 的第一个参数是含有 JavaScript 语句的字符串。
这个语句可能诸如 "alert('5 seconds!')",或者对函数的调用,诸如 alertMsg()"。
第二个参数指示从当前起多少毫秒后执行第一个参数(1000 毫秒等于一秒)。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body> <script>
function func() {
alert(123)
}
function demo(){
let s = setTimeout(func,3000);
function inner() {
clearTimeout(s)
}
setTimeout(inner,9000)
}
demo() </script>
</body>
</html>

  clearTimeout()

语法:
clearTimeout(setTimeout_variable)

  setInterval()

语法:
setInterval("JS语句",时间间隔) 返回值:
一个可以传递给 Window.clearInterval() 从而取消对 code 的周期性执行的值。 setInterval() 方法可按照指定的周期(以毫秒计)来调用函数或计算表达式。 setInterval() 方法会不停地调用函数,直到 clearInterval() 被调用或窗口被关闭。由 setInterval() 返回的 ID 值可用作 clearInterval() 方法的参数。

  clearInterval()

语法:
clearInterval(setinterval返回的ID值) clearInterval() 方法可取消由 setInterval() 设置的 timeout。
clearInterval() 方法的参数必须是由 setInterval() 返回的 ID 值。

  例子:循环计时器

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body> <script>
function f1() {
alert(123)
}
function clear(){
let s = setInterval(f1,3000);
function inner() {
clearInterval(s)
}
setTimeout(inner,9000)
}
clear() </script>
</body>
</html>

二、DOM

Document Object Model:
文档对象模型,通过它,可以访问HTML文档的所有元素。 JavaScript 可以通过DOM创建动态的 HTML:
能够改变页面中的所有 HTML 元素
能够改变页面中的所有 HTML 属性
能够改变页面中的所有 CSS 样式
能够对页面中的所有事件做出反应

1、HTML DOM树

BOM和DOM的操作

2、js查找标签

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<span id="s1" class="c1">我是div上面的span</span>
<div id="d1" class="c2">我是div
<span id="s2">我是div里面的第一个span</span>
<p id="p1">我是div里面span下面的p标签
<span id="s3">我是div里面的p标签里面的span标签</span>
</p>
<span id="s4">我是div里面的p标签下面的span标签</span>
</div>
<span>我是div下面的span</span>
</body>
</html>

①直接查找(*****)

document.getElementById           根据ID获取一个标签
document.getElementsByClassName 根据class属性获取
document.getElementsByTagName 根据标签名获取标签合集

BOM和DOM的操作

②间接查找

parentElement            父节点标签元素
children 所有子标签
firstElementChild 第一个子标签元素
lastElementChild 最后一个子标签元素
nextElementSibling 下一个兄弟标签元素
previousElementSibling 上一个兄弟标签元素

BOM和DOM的操作

3、节点操作

    js可以创建标签
给标签添加属性、文本和样式
操作html文档

①创建节点

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body> <span>div上面的span</span>
<div>div
<p>div>p</p>
<span id="s1">div>span</span>
<p>div>p
<span>div>p>span</span>
</p> </div>
<span>div+span</span> </body>
</html>

BOM和DOM的操作

BOM和DOM的操作

②添加节点

追加一个子节点(作为最后的子节点)
somenode.appendChild(newnode); 把增加的节点放到某个节点的前边。
somenode.insertBefore(newnode,某个节点);

③属性节点

获取文本节点的值:
var divEle = document.getElementById("d1")
divEle.innerText
divEle.innerHTML 设置文本节点的值:
var divEle = document.getElementById("d1")
divEle.innerText="1"
divEle.innerHTML="<p>2</p>"

BOM和DOM的操作

④获取值操作

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<input type="text"> <textarea name="" id="t1" cols="30" rows="10"></textarea>
</body>
</html>
语法:
elementNode.value 适用于以下标签:
input
select
textarea

BOM和DOM的操作

⑤class操作

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<style>
.c1 {
width: 400px;
height: 400px;
border-radius: 50%;
border: 3px solid black;
}
.bg_red {
background-color: red;
}
.bg_green {
background-color: green;
}
</style>
</head>
<body>
<div class="c1 bg_red bg_green"></div>
</body>
</html>
classList              获取所有样式类名(字符串)
classList.remove(cls) 删除指定类
classList.add(cls) 添加类
classList.contains(cls)存在返回true,否则返回false
classList.toggle(cls) 存在就删除,否则添加

BOM和DOM的操作

⑥指定css操作

JS操作CSS属性的规律:

    1.对于没有中横线的CSS属性一般直接使用style.属性名即可
obj.style.margin
obj.style.width
obj.style.left
obj.style.position 2.对含有中横线的CSS属性,将中横线后面的第一个字母换成大写即可
obj.style.marginTop
obj.style.borderLeftWidth
obj.style.zIndex
obj.style.fontFamily

BOM和DOM的操作

BOM和DOM的操作

BOM和DOM的操作

4、事件

①常用事件

onclick        当用户点击某个对象时调用的事件句柄。
ondblclick 当用户双击某个对象时调用的事件句柄。 onfocus 元素获得焦点。
onblur 元素失去焦点。 应用场景:用于表单验证,用户离开某个输入框时,代表已经输入完了,我们可以对它进行验证.
onchange 域的内容被改变。 应用场景:通常用于表单元素,当元素内容被改变时触发.(select联动) onload 一张页面或一幅图像完成加载。
onselect 在文本框中的文本被选中时发生。
onsubmit 确认按钮被点击,使用的对象是form。

②绑定方式

方式一:

    <div id="d1" onclick="changeColor(this);">点我</div>
<script>
function changeColor(this) {
ths.style.backgroundColor="green";
}
</script> 注意:this是实参,表示触发事件的当前元素。函数定义过程中的this为形参。 方式二: <div id="d2">点我</div>
<script>
var divEle2 = document.getElementById("d2");
divEle2.onclick=function () {
this.innerText="呵呵";
}
</script>

事件案例:

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<input type="text" id="d1">
<button id="b1">开始</button>
<button id="b2">结束</button> <script>
// 定义一个存储定时器的全局变量
var flag;
// 先获取代码中需要用到的一些固定标签对象
var b1Ele = document.getElementById('b1');
var iEle = document.getElementById('d1');
var b2Ele = document.getElementById('b2');
// 定义一个展示时间的函数
var showTime = function(){
// 获取当前时间
var cTime = new Date();
iEle.value = cTime.toLocaleString()
};
// 给b1标签绑定点击事件
b1Ele.onclick = function () {
// 先判断flag是否已经指代了一个定时器
if (!flag){
flag = setInterval(showTime,1000)
}
}; b2Ele.onclick = function () {
// 取消定时器
clearInterval(flag);
// 将标志位手动置为布尔值为false的值即可
flag = null;
}
</script>
</body>
</html>

定时器

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<select name="" id="d1"> </select> <select name="" id="d2"> </select> <script>
// 先获取需要操作的标签对象
let proEle = document.getElementById('d1');
let cityEle = document.getElementById('d2');
let data = {"河北省": ["廊坊", "邯郸"], "北京": ["朝阳区", "海淀区"], "山东": ["威海市", "烟台市"]};
// 将所有的省渲染到proEle标签内部 for循环获取所有的省
for (let pro in data){
// 创建option标签
let opEle = document.createElement('option');
// 给option标签设置文本值
opEle.innerText = pro;
// 将生成的option标签添加到proEle中
proEle.appendChild(opEle)
}
proEle.onchange = function () {
// 先清空cityEle标签内所有的内容
cityEle.innerHTML = '';
// 获取用户选择的省 根据省拿到对应的市
let choice_pro = proEle.value;
let cityList = data[choice_pro];
// for循环创建option标签添加到cityEle标签内
for (let i=0;i<cityList.length;i++){
// 创建option标签并添加文本
let cEle = document.createElement('option');
// 给option标签设置文本值
cEle.innerText = cityList[i];
// 将生成的option标签添加到proEle中
cityEle.appendChild(cEle)
}
} </script>
</body>
</html>

省市联动