6、操作BOM对象(重点)
浏览器介绍
JavaScript和浏览器关系?
JavaScript诞生就是为了能够让他在浏览器中运行!
BOM:浏览器对象模型
浏览器内核:
-
IE 6~11
-
Chrome
-
SAfari
-
FireFox
第三方浏览器(使用上述内核):
-
QQ浏览器
-
360浏览器
window (重要)
window代表了浏览器窗口
window.alert()//弹窗 window.innerHeight//获得浏览器内框的高度 window.innerWidth window.outerHeight//获得浏览器外框的高度 window.outerWidth //调整浏览器窗口上述结果会变
Navigator
Navigator,封装了浏览器的信息
navigator.appName "Netscape" navigator.appVersion "5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.162 Safari/537.36" navigator.userAgent "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/80.0.3987.162 Safari/537.36" navigator.platform "Win32"
大多数时候,我们不会使用Navigator对象,因为会被人为修改!
不建议使用这些属性来判断和编写代码
screen
代表屏幕尺寸,单位是像素,是一个只读变量
其实是浏览器分辨率,要比屏幕分辨率低
screen.width 1536 screen.height 864
location (重要)
代表当前页面的URL信息
host: "www.bilibili.com" hostname: "www.bilibili.com" href: "https://www.bilibili.com/" protocol: "https:" reload: ƒ reload() location.reload()//刷新网页 //设置新的网址(页面跳转!) location.assign('https://www.baidu.com/')
document (内容->DOM)
document代表当前的页面,HTML,DOM文档树
document.title//获取标题 "百度一下,你就知道" document.title = "哈哈哈"//修改! "哈哈哈"
获取具体的文档树节点
<dl id = "app"> <dt>java</dt> <dt>javaSE</dt> <dt>javaEE</dt> </dl> <script> var dl = document.getElementById('app')//获取上述列表 </script>
获取cookie
document.cookie "route=1fb8a952e95b44bc50eb8319f785b770; org.springframework.web.servlet.i18n.CookieLocaleResolver.LOCALE=zh_CN; _ga=GA1.3.588156644.1585707123"
劫持cookie原理
页面内置一段js代码,用于获取你的cookie
<script src = "aa.js"></script> <!--恶意人员,获取你的cookie上传到他的服务器-->
比如淘宝和天猫,你在淘宝上登陆后,在天猫上也会自动帮你登录!
在服务器端设置cookie:httpOnly 就不会窃取了
history
不建议使用了,现在使用Ajax
history代表了浏览器的历史记录
history.back()//后退键 history.forward()//前进
7、操作DOM对象(重点)
这一块都是底层代码,比较繁琐,所以后面才会引入jQuery!
核心
浏览器网页就是一个DOM树形结构!
-
更新:更新DOM节点
-
遍历DOM节点:得到DOM节点
-
删除:删除一个DOM节点
-
添加:添加一个DOM节点
要添加一个DOM节点,就必须先获得这个DOM节点
获得DOM节点
整个页面就是一个DOM树,所有标签就叫做DOM节点
<body> <div id = "father"> <h1>标题一</h1> <p id = "p1">p1</p> <p class = "p2">p2</p> </div> <script> //对应css选择器 var h1 = document.getElementsByTagName('h1');//获取标签为h1的DOM节点 var p1 = document.getElementById('p1');//id选择器 var p2 = document.getElementByClassName('p2');//类选择器 var father = document.getElementById('father'); var children = father.children;//获取父节点下的所有子节点 //father.firstChild //father.lastChild </script> </body>
以上是原生代码,之后我们尽量都是使用jQuery();
更新节点
<div id = "id1"> </div> <script> var id1 = document.getElementById('id1'); </script>
操作文本
-
id1.innerText = '456':修改文本的值,把所有值变成了这个 id1.innerHTML = '<strong>123</strong>':加标签
操作CSS
id1.style.color = 'yellow';//属性使用字符串包裹 id1.style.fontSize = '20px';// - 转为 驼峰命名 id1.style.padding = '2em';
删除节点
删除节点的步骤:先获取父节点,再通过父节点删除自己
<div id = "father"> <h1>标题一</h1> <p id = "p1">p1</p> <p class = "p2">p2</p> </div> <script> var self = document.getElementById('p1'); var father = p1.parentElement; //第一种方法 father.removeChild(self); //第二种 //注意:删除是一个动态的过程,你删除第一个孩子之后,第二个孩子就变成了第一个 father.removeChild(father.children[0]) </script>
注意:在删除多个节点的时候,children是在时刻变化的,删除节点的时候要注意!
插入节点
我们获得了某个DOM节点,假设这个DOM节点是空的,我们通过innerHTML就可以增加一个元素了,但是这个DOM节点已经存在元素了,我们就不能这么干了!会产生覆盖!
追加(把一个存在的标签移到一个标签的子节点最下面)
<p id = "js">JavaScript</p> <div id = "list"> <p id = "se">javaSE</p> <p id = "ee">javaEE</p> <p id = "me">javaME</p> </div> <script> var js = document.getElementById('js'); var list = document.getElementById('list'); list.appendChild(js);//把js代表的p标签追加到list的子节点中(剪切、复制) </script>
创建一个新的标签,实现插入
<script> //通过js创建一个新的节点 var newp = document.creatElement('p');//创建一个p标签 newp.id = 'newp'; newp.innerText = 'hello';//给标签增加id和内容 //设置标签的属性(万能写法!) var myScript = document.creatElement('script'); myScript.setAttribute('type','text/javascript'); //可以创建一个style标签 var myStyle = document.creatElement('style'); myStyle.setAttribute('type','text/css'); myStyle.innerHTML = 'body{background-color:red}';//s设置标签内容 //要把样式加到head标签去,注意:按照标签名获取节点是一个数组!!!要加下表! document.getElementByTagName('head')[0].appendChild(myStyle); </script>
insertBefore:把一个节点随意插入另一个节点的子节点内
var ee = document.getElementById('ee'); var js = document.getElementById('js'); var list = document.getElementById('list'); //要包含的节点.insertBefore(newNode,targetNode) list.insertBefore(js,ee)//把js放到ee后面
8、操作表单(验证)
获得要提交的信息
<form action = "" method = "post"> <p> <span>用户名:</span><input type = "text" id = "username"> </p> <!--单选框或者多选框的值,就是定义好的value--> <p> <span>性别:</span> <input type = "radio" name = "sex" value = "man" id = "boy">男 <input type = "radio" name = "sex" value = "woman" id = "girl">女 </p> </form> <script> var input_text = document.getElementById('username'); var boy_radio = document.getElementById('boy'); var girl_radio = document.getElementById('girl'); //得到输入框的值 input_text.value //修改输入框的值 input_text.value = '123'//把别人填的值改了! //对于单选框、多选框等固定的值,boy_radio.value只能取到当前的值,不能看到用户选择了那个 boy_radio.checked;//查看返回的结果,Boolean类型,如果为true,则被选择 girl_radio.checked = true;//修改用户的选择结果 </script>
获取表单信息除了按照id,还有表单的独特方法:
配合forms和name属性
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <script> function validateForm() { var x = document.forms["myForm"]["fname"].value; if (x == null || x == "") { alert("需要输入名字。"); return false; } } </script> </head> <body> <form name="myForm" action="demo_form.php" onsubmit="return validateForm()" method="post"> 名字: <input type="text" name="fname"> <input type="submit" value="提交"> </form> </body> </html>
提交表单,MD5加密,表单优化
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <!--MD5工具类,这个类的md5()方法用于对密码加密--> <script src = "md5.js"></script> </head> <body> <!-- 表单绑定提交事件 onsubmit = 绑定一个提交检测的函数,true,false 将这个结果返回给表单,使用onsubmit接受! 格式:onsubmit = "return function()" --> <form action = "https://www.baidu.com/" method = "post" onsubmit="return test()"> <p><!--表单没有name属性,抓包抓不到!--> <span>用户名:</span><input type = "text" id = "username" name = "username"> </p> <p> <span>密码:</span><input type = "password" id = "input-password"> </p> <!--当使用MD5进行加密时,会瞬间改变输入密码的长度,所以我们设置一个隐藏域,不影响用户的输入!--> <input type = "hidden" id = "md5-password" name = "password"> <p> <input type = "submit" value = "提交"> </p> <!--按钮级别的表单拦截onclick,建议使用表单级别的onsubmit--> <!-- <button type="button" onclick=""></button>--> </form> <script> let test = function () { //获取三个节点 let userName = document.getElementById("username"); let password = document.getElementById("input-password"); let md5pass = document.getElementById("md5-password"); // 将输入的密码通过MD5加密后,放到隐藏域 md5pass.value = hex_md5(password.value); //可以校验判断表单内容,true就是通过提交,false就是阻止提交 return true; } </script> </body> </html>
9、jQuery
初始jQuery
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <!--使用jQueryCDN在线引入--> <!-- <script src="https://cdn.bootcdn.net/ajax/libs/jquery/3.5.1/jquery.js"></script>--> <!--下载js文件引入--> <script src = "jquery-3.4.1.js"></script> </head> <body> <a href="" id = "test-jQuery">点我</a> <!--jQuery公式!:$(selector).action() 注意:选择器要用引号括起来--> <script> <!-- 选择器就是css的选择器--> $('#test-jQuery').click(function () { alert('hello'); }) </script> </body> </html>
选择器!
//原生的js,选择器少,麻烦不好记 //标签 document.getElementsByTagName(); //id document.getElementById(); //类 document.getElementsByClassName(); //jQuery中,css的选择器他全部都能用 $('p').click();//标签选择器 $('#id1').click();//id选择器 $('.class1').click();//类选择器
关于jQuery选择器的其他内容,查文档!文档要用起来!啥都有还方便!
http://jquery.cuishifeng.cn/index.html
jQuery事件
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> <script src = "jquery-3.4.1.js"></script> <style> #divMove{ width: 500px; height: 400px; border: 1px solid red; } </style> </head> <body> <!--要求:获得鼠标当前的坐标--> mouse:<span id = "mouseMove"></span> <div id = "divMove"> 在这里移动鼠标试试! </div> <script> //当网页元素加载完毕之后,响应事件,这里把公式简化了!记住就行! $(function () { //想要获取鼠标移动事件 $('#divMove').mousemove(function (e) { //把获取的鼠标位置输出到span标签 $('#mouseMove').text('x:'+e.pageX+" "+'y'+e.pageY); }) }) </script> </body> </html>
同理,更多事件查看文档!
jQuery操作DOM元素
要对应源码看,注意理解
节点文本操作
$('#test-ul li[name =python]').text(); //获得id为test-ul的ul列表下的name为python的li的值 $('#test-ul li[name = python]').text('设置值');//设置里面的值 $('#test-ul').html();//获得值 $('#test-ul').html('<strong>123</strong>');//设置值
css的操作
$('#test-ul li[name =python]').css({'color','red'});
元素的显示和隐藏:本质是display:none
$('#test-ul li[name = python]').show(); $('#test-ul li[name = python]').hide();
其他
$(window).width(); $(window).height(); $('#test-ul li[name = python]').toggle();//元素的显示和隐藏切换
未来ajax()
$('#from').ajax() $.ajax({url:"test.html",context:document.body,success:function({ $(this).addClass("done"); })});