06 jQuery
BOM和DOM
1. 什么是BOM和DOM
到目前为止,我们已经学过了JavaScript的一些简单的语法。但是这些简单的语法,并没有和浏览器有任何交互。
也就是我们还不能制作一些我们经常看到的网页的一些交互,我们需要继续学习BOM和DOM相关知识。
JavaScript分为 ECMAScript,DOM,BOM。
BOM(Browser Object Model)是指浏览器对象模型,它使 JavaScript 有能力与浏览器进行“对话”。
DOM (Document Object Model)是指文档对象模型,通过它,可以访问HTML文档的所有元素。
Window对象是客户端JavaScript最高层对象之一,由于window对象是其它大部分对象的共同祖先,在调用window对象的方法和属性时,可以省略window对象的引用。例如:window.document.write()可以简写成:document.write()。
2. window对象
所有浏览器都支持window对象。它表示浏览器窗口。
如果文档包含框架(frame或ifram标签),浏览器会为HTML文档创建一个windows对象,并为每个框架创建一个额外的window对象
没有应用于 window 对象的公开标准,不过所有浏览器都支持该对象。
所有 JavaScript 全局对象、函数以及变量均自动成为 window 对象的成员。
全局变量是 window 对象的属性。全局函数是 window 对象的方法。
接下来要讲的HTML DOM 的 document 也是 window 对象的属性之一。
一些常用的Window方法:
window.innerHeight:浏览器窗口的内部高度
window.innerWidth:浏览器窗口的内部宽度
window.open():打开新窗口
window.open('https://www.baidu.com','','height=400px,width=400px') // 指定窗口大小
window.open('https://www.baidu.com','','height=400px,width=400px,left=300px,top=100px') // 指定窗口大小并且指定打开位置
window.close():关闭当前窗口
3. window的子对象
3.1. navigator对象(了解即可)
浏览器对象,通过这个对象可以预判用户所使用的浏览器,包含了浏览器相关信息
navigator.appName // Web浏览器全称
"Netscape"
navigator.appVersion // Web浏览器厂商和版本的详细字符串
"5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.131 Safari/537.36"
navigator.userAgent // 客户端绝大部分信息
"Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.131 Safari/537.36"
'''
扩展:防爬措施
1.最简单最常用的一个就是校验当前请求的发起者是否是一个浏览器
没有userAgent就不是基于浏览器发送的请求
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/92.0.4515.131 Safari/537.36
如何破解该措施
在你的代码中加上上面的User-Agent配置即可
// 如果是window子对象,window可以不写
'''
navigator.platform // 浏览器运行所在的操作系统
"Win32"
3.2. screen对象(了解即可)
屏幕对象,不常用。
一些属性:
screen.availWidth - 可用的屏幕宽度
screen.availHeight - 可用的屏幕高度
3.3. history对象(了解即可)
window.history 对象包含浏览器的历史。
浏览历史对象,包含了用户对当前页面的浏览历史,但我们无法查看具体的地址,可以简单的用来前进或后退一个页面。(前提当前页面还可以前进或者后退)
history.forward() // 前进一页
history.back() // 后退一页
3.4. location对象
window.location对象用于获得当前页面的地址(URL),并把浏览器重定向新的页面。常用属性和方法。
window.location
Location {ancestorOrigins: DOMStringList, href: "https://www.cnblogs.com/Dominic-Ji/p/9121560.html", origin: "https://www.cnblogs.com", protocol: "https:", host: "www.cnblogs.com", …}
window.location.href
"https://www.cnblogs.com/Dominic-Ji/p/9121560.html" // 获取URL
window.location.href='https://www.baidu.com' // 跳转到指定页面
window.location.reload() // 重新加载页面
3.5. 弹出框
可以在 JavaScript 中创建三种消息框:警告框、确认框、提示框。
警告框
警告框经常用于确保用户可以得到某些信息。
当警告框出现后,用户需要点击确定按钮才能继续进行操作。
语法:
alert('确定吗')
undefined
确认框
确认框用于使用户可以验证或者接受某些信息。
当确认框出现后,用户需要点击确定或者取消按钮才能继续进行操作。
如果用户点击确认,那么返回值为 true。如果用户点击取消,那么返回值为 false。
语法:
confirm('你确定你要这么做吗')
true
提示框
提示框经常用于提示用户在进入页面前输入某个值。
当提示框出现后,用户需要输入某个值,然后点击确认或取消按钮才能继续操纵。
如果用户点击确认,那么返回值为输入的值。如果用户点击取消,那么返回值为 null。
语法:
prompt('请在下方输入')
"adsfasd"
prompt('请在下方输入','hello world')
"hello world"
4. DOM
查找标签
直接查找
document.getElementById() 根据id获取一个标签
document.getElementsByClassName 根据class属性获取
document.getElementsByTagName 根据标签名获取标签合集
// 注意每个方法返回值都不一样
实例:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<div>
<div id="d1">div>div</div>
<p class="c1">div>p
<span>div>p>span</span>
</p>
<p>div>p</p>
</div>
<div>div+div</div>
</body>
</html>
document.getElementById('d1')
<div id=•"d1">•div>div•</div>•
document.getElementsByClassName('c1')
HTMLCollection [p.c1]
document.getElementsByTagName('div')
HTMLCollection(3) [div, div#d1, div, d1: div#d1]
// 取出元素[] document.getElementsByTagName('div')[0]
<div>•…•</div>•
// 赋值给变量方便使用
let divEle = document.getElementsByTagName('div')[1]
divEle // <div id=•"d1">•div>div•</div>•
'''
当你使用变量名指代标签对象时一般都推荐定义成
divEle
pEle
aEle
'''
注意:
涉及到DOM操作的JS代码应该放在文档的哪个位置。
间接查找
parentElment 父节点标签元素
children 所有子标签
firsElementChild 第一个字标签元素
lastElementChild 最后一个标签元素
nextElmentSibling 下一个兄弟标签元素
previousElementSibling 上一个兄弟标签元素
divEle.parentElement
<body>•…•</body>•
let divEle=document.getElementById('d1')
divEle.children
(3) [div, p.c1, p]0: div1: p.c12: plength: 3[[Prototype]]: HTMLCollection
divEle.children[1]
<p class=•"c1">•…•</p>•"div>p "<span>•div>p>span•</span>•</p>•
divEle.firstElementChild
<div>•div>div•</div>•
divEle.lastChild
#text
divEle.lastElementChild
<p>•div>p•</p>•
divEle.nextElementSibling
<div>•div下面的div•</div>•
divEle.previousElementSibling
<div>•上面的div•</div>•
22
节点操作
创建节点
语法:
createElement(标签名)
添加节点
语法:
追加一个子节点(作为最后的子节点)
somenode.appendChild(newnode);
把增加的节点放到某个节点的前边。
somenode.insertBefore(newnode,某个节点);
示例:
var imgEle=document.createElement("img");
imgEle.setAttribute("src", "http://image11.m1905.cn/uploadfile/s2010/0205/20100205083613178.jpg");
var d1Ele = document.getElementById("d1");
d1Ele.appendChild(imgEle);
删除节点:
语法:
获得要删除的元素,通过父元素调用该方法删除。
somenode.removeChild(要删除的节点)
替换节点:
语法:
somenode.replaceChild(newnode, 某个节点);
属性节点
获取文本节点的值:
var divEle = document.getElementById("d1")
divEle.innerText
divEle.innerHTML
设置文本节点的值:
var divEle = document.getElementById("d1")
divEle.innerText="1"
divEle.innerHTML="<p>2</p>"
attribute操作
var divEle = document.getElementById("d1");
divEle.setAttribute("age","18")
divEle.getAttribute("age")
divEle.removeAttribute("age")
// 自带的属性还可以直接.属性名来获取和设置
imgEle.src
imgEle.src="..."
示例:
let pEle = document.createElement('p');
let pEle = document.createElement('p')
let imgEle = document.createElement('img')
imgEle // <img>•
pEle // <p>•</p>•
imgEle.src='1.png' // "1.png"
imgEle //<img src=•"1.png">•
imgEle.username='wyz' // "wyz" 自定义的属性没办法点方式直接设置
imgEle.setAttribute('username','wyz')
imgEle // <img src=•"1.png" username=•"wyz">•
imgEle.setAttribute('title','真好看')
imgEle //<img src=•"1.png" username=•"wyz" title=•"真好看">•
let divEle = document.getElementById('d1')
divEle.appendChild(imgEle) // <img src=•"1.png" username=•"wyz" title=•"真好看">•
# 标签内部添加元素
'''
创建a标签
设置文本
添加到标签内部
添加到标签内部
'''
let aEle = document.createElement('a')
undefined
aEle
<a>•</a>•
aEle.href='https://mzitu.com'
"https://mzitu.com"
aEle.innerText='点我'
"点我"
aEle
<a href=•"https:•/•/•mzitu.com">•点我•</a>•
let divEle = document.getElementById('d1')
undefined
let pEle = document.createElement('d2')
undefined
divEle.insertBefore(aEle,pEle)
divEle.innerHTML='<h1>hahaha</h1>' # 识别html标签
"<h1>hahaha</h1>"
divEle.innerText='<h1>hahaha</h1>' # 不识别html标签
"<h1>hahaha</h1>"
获取值操作
语法:
elementNode.value
使用于一下标签:
.input
.select
.textarea
实例
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<input type="text" id="d1">
<select name="" id="d2">
<option value="1">苹果</option>
<option value="2">橘子</option>
<option value="3">布哪呢</option>
</select>
<textarea id="d3"></textarea>
<input type="file" id="d4">
</body>
</html>
# 控制台
let divEle = document.getElementById('d1')
let sEle = document.getElementById('d2')
let tEle = document.getElementById('d3')
divEle.value // "fadsf"
sEle.value // "3"
tEle.value //"dfafd"
let fileEle = document.getElementById('d4')
fileEle.value # 获取的只是路径 "C:\\fakepath\\$3LEV0UZNYFI7_5WY8@480F.png"
fileEle.files
FileList {0: File, length: 1}0: File {name: "$3LEV0UZNYFI7_5WY8@480F.png", lastModified: 1624371037113, lastModifiedDate: Tue Jun 22 2021 22:10:37 GMT+0800 (中国标准时间), webkitRelativePath: "", size: 11886, …}length: 1[[Prototype]]: FileList
fileEle.files[0] # 获取文件数据
File {name: "$3LEV0UZNYFI7_5WY8@480F.png", lastModified: 1624371037113, lastModifiedDate: Tue Jun 22 2021 22:10:37 GMT+0800 (中国标准时间), webkitRelativePath: "", size: 11886, …}
class的操作
className 获取所有样式类名(字符串)
classList.remove(cls) 删除指定类
classList.add(cls) 添加类classList.contains(cls) 存在返回true,否则返回falseclassList.toggle(cls) 存在就删除,否则添加
实例
let divEle = document.getElementById('d1')
divEle.classList # 获取标签所有的属性
DOMTokenList(3) ["c1", "bg_green", "bg_red", value: "c1 bg_green bg_red"]
divEle.classList.remove("bg_red")
undefined # 移除某个类属性
divEle.classList.remove("bg_green")
undefined
divEle.classList.add('bg_red')
undefined # 添加某个类属性
divEle.classList.add('bg_green')
undefined
divEle.classList.contains('c1')
true # 验证是否包含某个类属性
divEle.classList.contains('c3')
false
divEle.classList.toggle('bg_red')
false # 该属性有则删除无则添加
divEle.classList.toggle('bg_red')
true
divEle.classList.toggle('bg_red')
false
divEle.classList.toggle('bg_red')
true
divEle.classList.toggle('bg_red')
false
指定CSS操作
let pEle = document.getElementById('d2')
pEle.style.color='red'
"red"
pEle.style.border='3px solid black'
"3px solid black"
pEle.style.fontSize='24px'
"24px"
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
事件
达到某个事先设定的条件,自动触发的动作。
HTML 4.0 的新特性之一是有能力使 HTML 事件触发浏览器中的动作(action),比如当用户点击某个 HTML 元素时启动一段 JavaScript。下面是一个属性列表,这些属性可插入 HTML 标签来定义事件动作。
# 绑定事件的两种方式
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<button onclick="func1()">点我</button>
<button id="d1">点我</button>
<script>
// 第一种绑定事件的方式
function func1() {
alert(111)
}
// 第二种绑定事件的方式
let btnEle = document.getElementById('d1');
btnEle.onclick = function () {
alert(222)
}
</script>
</body>
</html>
常用事件
onclick 当用户点击某个对象时调用的事件句柄。
ondblclick 当用户双击某个对象时调用的事件句柄。
onfocus 元素获得焦点。 // 练习:输入框
onblur 元素失去焦点。 应用场景:用于表单验证,用户离开某个输入框时,代表已经输入完了,我们可以对它进行验证.
onchange 域的内容被改变。 应用场景:通常用于表单元素,当元素内容被改变时触发.(select联动)
onkeydown 某个键盘按键被按下。 应用场景: 当用户在最后一个输入框按下回车按键时,表单提交.
onkeypress 某个键盘按键被按下并松开。
onkeyup 某个键盘按键被松开。
onload 一张页面或一幅图像完成加载。
onmousedown 鼠标按钮被按下。
onmousemove 鼠标被移动。
onmouseout 鼠标从某元素移开。
onmouseover 鼠标移到某元素之上。
onselect 在文本框中的文本被选中时发生。
onsubmit 确认按钮被点击,使用的对象是form。
事件示例:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<input type="text" id="d1" style="display: block">
<button id="d2">开始</button>
<button id="d3">结束</button>
<script>
let t = null
// 1 访问页面之后 将访问时间展示在input框中
// 2 动态展示时间
let inputEle = document.getElementById('d1');
function show_time() {
let current_time = new Date();
inputEle.value = current_time.toLocaleString();
}
let btn1Ele = document.getElementById('d2');
let btn2Ele = document.getElementById('d3');
btn1Ele.onclick=function(){
if (!t){
t = setInterval(show_time,1000);
}
}
btn2Ele.onclick=function () {
clearInterval(t);
t=null
}
</script>
</body>
</html>
搜索框
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<input type="text" value="吃饭吗,有粑粑" id="d1">
<script>
let iEle = document.getElementById('d1')
iEle.onfocus=function () {
// 将input框内部值去除
iEle.value = ''
// 点value就是获取 等号赋值就是设置
}
// 失去焦点事件
iEle.onblur = function () {
iEle.value = '吃饭吗,有粑粑'
}
</script>
</body>
</html>
选择省市
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
</head>
<body>
<select name="" id="d1">
<option disabled selected>请选择省</option>
</select>
<select name="" id="d2">
<option disabled selected>请选择市</option>
</select>
<script>
let proEle = document.getElementById('d1');
let cityEle = document.getElementById('d2');
data = {
"安徽省":['合肥市','淮南市','六安市','淮北市'],
'河南省':['商丘市','郑州市','周口市','驻马店'],
'浙江省':['丽水市','杭州市','台州市','温州市'],
'云南省':['大理市','西双版纳','昆明',]};
for (var i in data){
// 将省信息做成一个个option标签 添加到第一个select框中
// 1 创建option标签
let opEle = document.createElement('option');
// 2 设置文本
opEle.innerText = i;
// 3 设置value
opEle.value = i;
// 将创建好的option标签添加到第一个select中
proEle.appendChild(opEle)
}
// 文本域变化事件,change事件
proEle.onchange = function () {
// 先获取用户选择的省
let currentPro = proEle.value;
// 获取对应省的所有市
let currentCityList = data[currentPro];
// 清空市select中所有的option
cityEle.innerHTML = '';
// for循环所有的市 渲染到第二个select中
for (let i=0;i<currentCityList.length;i++){
currentCity = currentCityList[i];
let opEle = document.createElement('option');
opEle.innerText = currentCity;
opEle.value = currentCity
cityEle.appendChild(opEle)
}
}
</script>
</body>
</html>
window.onload
当我们给页面上的元素绑定事件的时候,必须等到文档加载完毕。因为我们无法给一个不存在的元素绑定事件。
window.onload事件在文件加载过程结束的时候触发。此时,文档中的所有对象都位于DOM中,并且所有图像,脚本,链接和子框架都已完成加载。
注意:.onload()函数存在覆盖现象。
06 jQuery的更多相关文章
- 【jQuery基础学习】06 jQuery表单验证插件-Validation
jQuery的基础部分前面都讲完了,那么就看插件了. 关于jQuery表单验证插件-Validation validation特点: 内置验证规则:拥有必填.数字.E-Mail.URL和信用卡号码等1 ...
- 2015.01.06 JQuery
jQuery是一个兼容多浏览器的javascript库.开发出来的JavaScript的脚本包.非侵入性的脚本. 下载地址:http://jquery.com/ (打不开网页需要翻* ...
- 06 Jquery 基础
前端学习之jquery: jQuery:一个库 Jquery的基础语法: $(selector).action() 基本选择器: <script> //基本选择器 //$("*& ...
- [UI] 06 - jQuery
前言 From : http://www.runoob.com/jquery/jquery-intro.html Ref: jQuery 实例 一.什么是 jQuery ? jQuery是一个Java ...
- 8.27 jQuery
2018-8-27 19:38:06 jQuery 参考http://www.cnblogs.com/liwenzhou/p/8178806.html jQuery练习题和 .js文件在Github ...
- [Code::Blocks] Install wxWidgets & openCV
The open source, cross platform, free C++ IDE. Code::Blocks is a free C++ IDE built to meet the most ...
- 大前端时代已经到来!传智播客2015之WEB前端视频教程(全套教程共15G)
大前端时代已经到来!传智播客2015之WEB前端视频教程(全套教程共15G)大前端时代已经到来!如今,前端开发工程师的职责,不是只有切图.制作网页这么简单哦! G:\传智播客2015-WEB前端视频教 ...
- 使用ASP.NET 构建 Web 应用程序快速入门-8小时的免费培训视频
- Scott Hanselman的中文博客[转载] [原文发表地址] Building Web Apps with ASP.NET Jump Start - 8 Hours of FREE Trai ...
- js上课笔记
Html 结构化CSS 样式JavaScript 行为交互01.JavaScript基础02.JavaScript操作BOM对象03.JavaScript操作DOM对象 *****04.JavaScr ...
随机推荐
- ssh到localhost或127.0.0.1拒绝连接
通过ssh连接到本机报错 ssh: connect to host localhost port 22: Connection refused, 你能用ssh登录其它主机并不代表着本地有ssh服务,要 ...
- C语言考题:输入一个字符串,将此字符串中特定的字符删去后, 显示新的字符串,要求用函数来完成删去字符的操作。
#include <stdio.h> #include <string.h> /*此题只需要删除单个字符,比较简单.相信大家也能做出来的.我这个也是可以实现的.只是加了两个判断 ...
- Linux上天之路系列目录
Linux上天之路系列目录 Linux上天之路(一)之Linux前世今生 Linux上天之路(二)之Linux安装 Linux上天之路(三)之Linux系统目录 Linux上天之路(四)之Linux界 ...
- Python路径表示方法
一 更换为绝对路径的写法func1("C:\\Users\\renyc") 二 显式声明字符串不用转义(加r)func1(r"C:\Users\renyc") ...
- 利用python绘制分析路易斯安那州巴吞鲁日市的人口密度格局
前言 数据来源于王法辉教授的GIS和数量方法,以后有空,我会利用python来实现里面的案例,这里向王法辉教授致敬. 绘制普查人口密度格局 使用属性查询提取区边界 import numpy as np ...
- PAT 乙级 1004. 成绩排名 (20)(C语言描述)
读入n名学生的姓名.学号.成绩,分别输出成绩最高和成绩最低学生的姓名和学号. 输入格式:每个测试输入包含1个测试用例,格式为 第1行:正整数n 第2行:第1个学生的姓名 学号 成绩 第3行:第2个学生 ...
- 代码审计入门之BlueCMS v1.6 sp1
0x00 前言 作为一名代码审计的新手,网上的大佬们说代码审计入门的话BlueCMS比较好,所以我就拿BlueCMS练练.(本人实在是一枚新手,请大佬们多多赐教) 0x01 环境准备 Phpstudy ...
- Typora中本地图片无法上传CSDN解决方案
解决方法 本地图片无法上传,我们可以选择使用在线免费图床 把想要使用的图先上传到图床后复制对应的MarkDown语句到typora即可 在这里,给大家推荐一个图床 [图床链接](Image Uploa ...
- WebGL 与 WebGPU 比对[1] 前奏
目录 1 为什么是 WebGPU 而不是 WebGL 3.0 显卡驱动 图形 API 的简单年表 WebGL 能运行在各个浏览器的原因 WebGPU 的名称由来 2 与 WebGL 比较编码风格 Op ...
- WEB开发的相关知识(Tomcat)
Internet上供外界访问的Web资源分为 静态web资源(如html 页面):指web页面中供人们浏览的数据始终是不变. 动态web资源:指web页面中供人们浏览的数据是由程序产生的,不同时间点访 ...