导读:
JavaScript(简称“JS”) 是一种具有函数优先的轻量级,解释型或即时编译型的编程语言。虽然它是作为开发Web页面的脚本语言而出名,但是它也被用到了很多非浏览器环境中,JavaScript 基于原型编程、多范式的动态脚本语言,并且支持面向对象、命令式、声明式、函数式编程范式。(本篇文章主要讲解的是web编程)
JavaScript最初由Netscape的Brendan Eich设计,最初将其脚本语言命名为LiveScript,后来Netscape在与Sun合作之后将其改名为JavaScript。
特性
计算机是一个非常庞大而精彩的世界,也不缺乏美好,而web作为近几十年来一种蓬勃发展的存在,其成长性是有目共睹的,因此,学习web应当成为一种必备技能,不求深,能写出一个管理信息系统,写一个简单的博客网站,即可。
希望大家能找到自己的最终归属,找到心之所向。
贴个宣传博客HTML&&CSS(持续更新中)
书写位置
// 行内 <input type="submit" value="sub" onclick="alert('HelloWorld')"> // 内嵌 <script><script> // 外部引入 <script src="xxx.js"><script>
输入和输出语句
// 输出 console.log(msg) // 输入语句 prompt(info)
声明变量
var variable_name
数据类型
检测数据类型
typeof variable_name
数据类型转换
// 转化成字符串 variable.toString() // 转化成数字 variable.parseInt() variable.parseFloat() // 强制类型转换 Number(variable) // 转换成布尔型 Boolean(variable)
略
顺序结构
var a = 1
分支结构
if () { // do something } else if () { // do something } else { // do something }
switch () { case 1: // do something case 2: // do something default: // do something }
循环结构
for (var i = 0; i < 100; i++) { // do something }
while (i < 100) { // do something }
do while // 不看这个
循环终止
// 终止所有循环 break // 终止本次循环 continue
创建数组
var arr = {a, b, c};
遍历访问数组
for (var i = 0; i < arr.length; i++) { console.log(arr[i]) }
修改数组长度
arr.length = 10
定义函数
function getpwd() { // do something }
传入参数
function getpwd(aru) { // do something }
函数的返回值
function getpwd() { // do something return vari; }
函数的声明方式
// 1 function getpwd() { // do something } // 2 var f = function getpwd() { // do something }
// 字面量创建对象 var obj = { name: "lh" age: 12 f: function() { // do something } } // new var obj = new Object(); obj.name = "lh"; obj.age = 10; obj.f = function() { // do something } // 构造函数 function obj() { this.attribute = value; this.method = function() } new obj();
遍历对象属性
for (variable in obj) { // do something }
多看看js都标准库MDN
MDN
Math,Date,Array
DOM是一个接口,改变网页样式
// 根据ID获取 document.getElementById() // 根据class document.getElementsByClassName() // 根据类名 document.getElementsByName() // 根据标签名 document.getElementsByTagName() // 获取body document.body // 获取HTML document.documentElement // 根据指定选择器返回第一个对象, .xx, #xx, xx document.querySelector() // 根据指定选择器返回 document.querySelectorAll() // 以源码形式返回 console.log() // 以对象形式返回 console.dir()
触发—响应机制
事件三要素:
var btn = document.getElementById("click") btn.onclick = function() { alert("Hello World!"); }
鼠标事件 | 触发条件 |
---|---|
onclick | 鼠标点击左键触发 |
onmouseover | 鼠标经过触发 |
onmouseout | 鼠标离开触发 |
onfocus | 获得鼠标焦点触发 |
onblur | 失去鼠标焦点触发 |
onmousemove | 鼠标移动触发 |
onmouseup | 鼠标弹起触发 |
onmousedown | 鼠标按下触发 |
// 从起始到终止,但去除了HTML标签,同时空格和换行也会被去除 element.innerText // 改变所有内容 element.innerHTML
xxx.src = "xxx"
获取元素属性
// 第一种 console.log(xxx.id); // 第二种 var p = querySelector('div'); console.log(p.getAttribute('id'));
设置属性
// 第一种 p.id = 1; // 第二种 p.setAttribute('id', 1);
移除属性
p.removeAttribute('index');
xxx.style.color = "red";
拷贝节点
// 浅拷贝,默认为false var p = ul.children[0].cloneNode(); ul.appendChild(p) // 深拷贝 var p = ul.children[0].cloneNode(true);
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Title</title> </head> <body> <table> <thead> <tr> <th>姓名</th> <th>操作</th> <th>成绩</th> <th>科目</th> </tr> </thead> <tbody> </tbody> </table> <script> let dates = [ { name: "lh", subject: "C++", score: "100" }, { name: "hl", subject: "C++", score: "100" }, ]; let tbody = document.querySelector('tbody'); for (let i = 0; i < dates.length; i++) { let tr = document.createElement('tr'); tbody.appendChild(tr); for (let k in dates[i]) { let td = document.createElement('td'); td.innerHTML = dates[i][k] tr.appendChild(td); } let td = document.createElement('td') td.innerHTML = '<a href="javascript:;">删除</a>' tr.appendChild(td) } let as = document.querySelectorAll('a'); for (let i = 0; i < as.length; i++) { as[i].onclick = function () { tbody.removeChild(this.parentNode.parentNode) } } </script> </body> </html>
浏览器对象模型,独立于内容和而与浏览器窗口进行交互的对象,其核心对象是window
window.onload是窗口页面)加载事件,当文档内容完全加载完成会触发该事件(包括图像、脚本文件、CSS文件等),就调用的处理函数。
// 第一种 window.onload = function() {} // 第二种 window.addEventListener("load", function(){ // do something })
1.有了window.onload就可以把JS代码写到页面元素的上方,因为onload是等页面内容全部加载完毕,
再去执行处理函数。
2. window.onload传统注册事件方式只能写一次,如果有多个,会以最后-个window.onload为准。
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Register</title> <script type="text/javascript"> window.addEventListener('load', function() { let btn = document.querySelector('button'); btn.addEventListener('click', function() { alert("pp"); }) }) </script> </head> <body> <button>H</button> </body> </html>
window.innerWidth代表浏览器窗口大小
<script type="text/javascript"> window.addEventListener('resize', function() { // do something }) </script>
<script type="text/javascript"> window.setTimeout(function() { console.log("A") }, 10) </script>
停止定时器
window.clearTimeout()
定时回调定时器
setInterval(回调函数,间隔的毫秒) // 清楚定时器 clearInterval
JS是单线程
JavaScript语言的一大特点就是单线程,也就是说,同一个时间只能做一件事。 这是因为Javascript这门脚
本语言诞生的使命所致一JavaScript 是为处理页面中用户的交互,以及操作DOM而诞生的。比如我们对
某个DOM元素进行添加和删除操作,不能同时进行。应该先进行添加,之后再删除。
JS的异步是通过回调函数实现的。
-般而言,异步任务有以下三种类型:
执行机制
window对象给我们提供了-个location属性用于获取或设置窗体的URL ,并且可以用于解析URL。因为这个属性返回的是一个对象,所以我们将这个属性也称为location对象。
属性
location对象属性 | 返回值 |
---|---|
location.href | 获取或者设置整个URL |
location. host | 返回主机(域名) www.itheima.com |
location.port | 返回端口号如果未写返回空字符串 |
location.pathname | 返回路径 |
location. search | 返回参数 |
location. hash | 返回片段#后面内容 常见于链接锚点 |
方法
location对象方法 | 返回值 |
---|---|
location.assign() | 跟href- -样,可以跳转页面(也称为重定向页面) |
location.replace() | 替换当前页面,因为不记录历史,所以不能后退页面 |
location.reload() | 重新加载页面,相当于刷新按钮或者f5 如果参数为true强制刷新ctrl+f5 |
navigator对象包含有关浏览器的信息,它有很多属性,我们最常用的是userAgent ,该属性可以返回由客户机发送服务器的user- agent头部的值。
window对象给我们提供了一个history对象,与浏览器历史记录进行交互。该对象包含用户(在浏览器窗口中)访问过的URL.
history对象方法 | 作用 |
---|---|
back() | 可以后退功能 |
forward() | 前进功能 |
go(参数) | 前进后退功能参数如果是1前进1个页面如果是-1后退1个页面 |
jQuery库下载
引入jQuery
<script src="jquery.js"></script>
两种写法
$ jQuery()
// DOM对象 var btm = document.querySelector('div'); console.dir(btm); // jQuery对象 $('div')
相互转化:
DOM对象转换成jQuery对象
var ptr = document.querySelector('id'); $(ptr);
jQuery对象转换成DOM对象
// 第一种 $('div')[index] // 第二种 $('div').get([index])
基本和层级选择器
$('选择器') // 里面直接写CSS选择器即可,但是要加引号
名称 | 用法 | 描述 |
---|---|---|
ID选择器 | $("#id") | 获取指定ID的元素 |
全选选择器 | $(’*’) | 匹配所有元素 |
类选择器 | $(".class") | 获取同一类class的元素 |
标签选择器 | $(“div”) | 获取同一类标签的所有元素 |
并集选择器 | $(“div,p,li”) | 选取多个元素 |
交集选择器 | $(“li.current”) | 交集元素 |
层级选择器
名称 | 用法 | 描述 |
---|---|---|
子代选择器 | $(“ul>li”); | 使用>号,获取亲儿子层级的元素;注意,并不会获取孙子层级的元素 |
后代选择器 | $(“ul li”); | 使用空格,代表后代选择器,获取uI下的所有li元素,包括孙子等 |
隐式迭代
// 获取四个div $('div')
遍历内部DOM元素(伪数组形式存储)的过程就叫做隐式迭代。
简单理解:给匹配到的所有元素进行循环遍历,执行相应的方法,而不用我们再进行循环,简化我们的操作,方便我们调用。
筛选选择器
语法 | 用法 | 描述 |
---|---|---|
:first | $(li:first’) | 获取第一个i元素 |
:last | $(li:last’) | 获取最后一个 |
:eq(index) | $(“li:eq(2)”) | 获取到的i元素中,选择索引号为2的元素,索引号index从0开始。 |
:odd | $(“l:odd”) | 获取到的li元素中,选择索引号为奇数的元素 |
:even | $(“li:even”) | 获取到的li元素中,选择索引号为偶数的元素 |
jQuery筛选方法
语法 | 用法 | 说明 |
---|---|---|
parent() | $(“li”). parent(); | 查找父级 |
children(selector) | $(“u1”). children(“li”) | 相当于$(“ul>li”),最近- -级(亲儿子) |
find(selector) | $(“ul”). find(“li”); | 相当于$(“ul li”),后代选择器 |
siblings(selector) | $(". first").siblings(“li”); | 查找兄弟节点,不包括自己本身 |
nextAll([expr]) | $(". first"). nextAll() | 查找当前元素之后所有的同辈元素 |
prevtAll([expr]) | $(" .last"). prevAll() | 查找当前元素之前所有的同辈元素 |
hasClass(class) | $(‘div’).hasClass( “protected”) | 检查当前的元素是否含有某个特定的类,如果有,则返回true |
eq(index) | $(“li”). eq(2); | 相当于$(“li:eq(2)”), index从0开始 |
案例:新浪下拉菜单
$(function() { // 鼠标经过 $('.nav>li').mouseover(function() { // $(this) jQuery 当前元素 // show() 显示元素 hide() 隐藏元素 $(this).children('ul').show(); }); // 鼠标离开 $('nav>li').mouseout(function() { $(this).children('ul').hide(); }) })
排他思想
想要多选一的效果,排他思想:当前元素设置样式,其余的兄弟元素清除样式。
$(function() { // 隐式迭代,给所有按钮都绑定了点击事件 $("button").click(function() { // 当前的元素变化背景颜色 $(this).css("background", "pink"); // 其他的兄弟去掉背景颜色,隐式迭代 $(this).siblings("button").css("background", ""); }); })
jQuery链式编程
链式编程是为了节省代码量,看起来更优雅。
$(this).css("background", "pink").siblings("button").css("background", "");
操作CSS方法
参数只写属性名,则是返回属性值
$(this).css("color");
参数是属性名,属性值,逗号分隔,是设置-组样式,属性必须加引号,值如果是数字可以不用跟单位和引号
$(this).css("color", "red");
参数可以是对象形式,方便设置多组样式。属性名和属性值用冒号隔开,属性可以不用加引号,
$(this).css({"color": "red", "width": 200});
添加类
<style> .current { background: red; } </style> <div></div> <script> $function() { $('div').click(function() { $(this).addClass('current'); }) } </script>
移除类
<script> ...removeClass(); </script>
切换类
<script> ...toggleClass(); </script>
显示和隐藏
show(); // 显示 hide(); // 隐藏 toggle(); // 切换
滑动
slideUp(); // 下拉滑动 slideDown(); // 下拉隐藏 slideToggle(); // 下拉滑动
鼠标经过,鼠标离开
mouseover // 鼠标经过 mouseout // 鼠标离开 hover // 经过和离开
淡入淡出
fadeIn(); // 淡入 fadeOut(); // 淡出 fadeToggle(); // 淡入淡出切换 fadeTo(); // 修改透明度和速度
自定义动画
animate( params, // 想要修改的样式属性 speed, // 速度 easing, // 切换效果 fn, // 回调函数 )
获取固有属性
// 获取属性 prop("index"); // 修改属性 prop("index", 1); // 固有属性
获取和设置自定义属性
attr()
// 获取元素内容 html() // 修改元素内容 html('123');
获取普通元素文本内容
text(); text('123');
获取表单内容
val(); val("asd");
jQuery隐式迭代是对同一元素做了同样的操作。如果想要给同一 一元素做不同操作,就需要用到遍历。
// domEle是DOM对象 $('div').each(function(index, domEle) { // do something $(domEle).css("color", "red") })
尺寸
语法 | 用法 |
---|---|
width() / height() | 取得匹配元素宽度和高度值只算width 1 height |
innerWidth()/ innerHieght() | 取得匹配元素宽度和高度值包含padding |
outerWidth() / outerHeight() | 取得匹配元素宽度和高度值包含padding、border |
outerWidth(true) / outerHeight(true) | 取得匹配元素宽度和高度值包含padding、borde、 margin |
位置
offset()设置或获取元素偏移
position(获取元素偏移
// 第一种 click() // 第二种 trigger('click') // 第三种 on('foucs', function() {});