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

  JavaScript分为 ECMAScript,DOM,BOM。

一、BOM

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

1、window对象

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

2、window的子对象

①location对象

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

  常用属性和方法:

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

②弹出框

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

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

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

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

③计时相关

通过使用 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树

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 根据标签名获取标签合集

②间接查找

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

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>

②添加节点

追加一个子节点(作为最后的子节点)
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>"

④获取值操作

<!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

⑤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) 存在就删除,否则添加

⑥指定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

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>

省市联动

最新文章

  1. php+mysql+apache项目运行所遇到的一系列配置问题
  2. 【UOJ #150】【NOIP 2015】运输计划
  3. Fix the Can’t clobber writable file error in Perforce Version Control System - forward
  4. Android 查看內存使用
  5. AcmeAir安装AI探针--企业版
  6. 【Python笔记】图片处理库PIL的源代码安装步骤
  7. 多线程Demo
  8. 仅当使用了列的列表并且 IDENTITY_INSERT 为 ON 时,才能为表&#39;SpeType&#39;中的标识列指定显式值
  9. list和用vector区别(Vector相当于是数组,读写快,插入慢)
  10. mysql字符串替换
  11. mysql 二级索引
  12. 43个优秀的Swift开源项目推荐
  13. vue 之 筛选功能实现
  14. Note 387206.1 ORA-15041: ASM diskgroup with unlike disks sizes
  15. 六大主流开源SQL引擎
  16. JFinal3.0 sql管理与动态生成
  17. Python常用time处理
  18. Linux服务器上安装JDK小白教程
  19. 时间序列分析工具箱——timetk
  20. mariadb或者mysql查看某个库相关的用户授权信息

热门文章

  1. 导入已有项目到svn
  2. String,StringBuffer,StringBulider 三者的区别
  3. redis 命令都在这了
  4. Android 开源项目及库汇总(2)
  5. pycharm 的一个小问题
  6. Codeforces 919 行+列前缀和 树上记忆化搜索(树形DP)
  7. web.xml中url-pattern中/和/*的区别(来自网络)
  8. 通过telnet自动下载cfg配置文件
  9. ZROI 19.07.29 线性代数入门/wq
  10. typing 模块