JS
-JS基础语法
-BOM(JS操作浏览器)
-DOM(JS操作文档)
JS基础语法:
0. JS引入方式
1. 直接在script标签里面写代码
2. 在单独的JS文件中写代码,然后通过script标签的src属性引入写好的JS文件
1. 变量
1. var 变量名; var 变量名 = 值
2. 变量的命名 字母 数字 下划线和$组成
3. 推荐使用驼峰
2. 数据类型
1. 数字 Number
1. NaN
2. parseInt("111") --> 把字符串转成数字
3. parseFloat("111") --> 把字符串转成小数
2. 字符串 String
1. 字符串的常用方法
3. 布尔值 Boolean
4.数组 Array
1. 常用方法
5. null
6. undefined
3. 条件判断
1. if else
2. if; else if; else;
3. switch (值){
case 1:
console.log(...);
break;
case 2:
...
default:
console.log(上面case都不满足就执行这一句);
}
4. 循环
1. for循环
for (var i=0;i<值;i++){
console.log(i);
}
2. while循环
var i = 5;
while (i>0){
console.log(i);
i--;
}
5. 运算符
1. 算数运算符
+ - * / % ++ --
2. 比较运算符
== != > < >= <=
注意!!! 强等于 === !==
3. 逻辑运算符
||(或) &&(与) !(非)
4. 赋值运算符
= += -= *= /=
补充:
Python的lambda
2. 今日内容
1. 函数
1. 函数的定义
2. arguments
func(11,22)
arguments --> [11, 22] arguments[0] arguments[1]
3. 作用域
1. 函数的调用 要往回找 函数的定义阶段
2. 首先在函数内部找 -> 内部找不到就往外找,直到找到全局为止
4. 词法分析
1. 分析(分析的函数内部变量定义过程)
1. 先看参数
2. 看有没有局部变量
3. 看有没有函数定义
2. 执行(实际执行代码)
3. 内置的对象和方法
1. 自定义对象
1. {name: "xiaoqiang", age: 18}
-键不用加引号,加上也不出错
-值如果是字符串必须写双引号
2. new关键字形式
2. 内置的Date对象 --> Python中的内置模块
3. JSON对象 (背会)
1. 字符串转对象 --> obj = JSON.parse(string)
2. 对象转字符串 --> s = JSON.stringify(obj)
4. Math对象
5. RegExp(正则)
1. 两种定义方式:
1. new RegExp("^[a-zA-Z][a-zA-Z0-9_]{5,11}$")
2. /new RegExp("^[a-zA-Z][a-zA-Z0-9_]{5,11}$")/
2. 匹配模式
1. g 全局
2. i 忽略大小写
3. 坑
1. 正则表达式中间不能加空格
2. .test() --> .test(undefined) --> .test("undefined")
3. 全局模式下会有一个lastIndex属性
-JS基础语法
-BOM(JS操作浏览器)
-DOM(JS操作文档)
JS基础语法:
0. JS引入方式
1. 直接在script标签里面写代码
2. 在单独的JS文件中写代码,然后通过script标签的src属性引入写好的JS文件
1. 变量
1. var 变量名; var 变量名 = 值
2. 变量的命名 字母 数字 下划线和$组成
3. 推荐使用驼峰
2. 数据类型
1. 数字 Number
1. NaN
2. parseInt("111") --> 把字符串转成数字
3. parseFloat("111") --> 把字符串转成小数
2. 字符串 String
1. 字符串的常用方法
3. 布尔值 Boolean
4.数组 Array
1. 常用方法
5. null
6. undefined
3. 条件判断
1. if else
2. if; else if; else;
3. switch (值){
case 1:
console.log(...);
break;
case 2:
...
default:
console.log(上面case都不满足就执行这一句);
}
4. 循环
1. for循环
for (var i=0;i<值;i++){
console.log(i);
}
2. while循环
var i = 5;
while (i>0){
console.log(i);
i--;
}
5. 运算符
1. 算数运算符
+ - * / % ++ --
2. 比较运算符
== != > < >= <=
注意!!! 强等于 === !==
3. 逻辑运算符
||(或) &&(与) !(非)
4. 赋值运算符
= += -= *= /=
补充:
Python的lambda
2. 今日内容
1. 函数
1. 函数的定义
2. arguments
func(11,22)
arguments --> [11, 22] arguments[0] arguments[1]
3. 作用域
1. 函数的调用 要往回找 函数的定义阶段
2. 首先在函数内部找 -> 内部找不到就往外找,直到找到全局为止
4. 词法分析
1. 分析(分析的函数内部变量定义过程)
1. 先看参数
2. 看有没有局部变量
3. 看有没有函数定义
2. 执行(实际执行代码)
3. 内置的对象和方法
1. 自定义对象
1. {name: "xiaoqiang", age: 18}
-键不用加引号,加上也不出错
-值如果是字符串必须写双引号
2. new关键字形式
2. 内置的Date对象 --> Python中的内置模块
3. JSON对象 (背会)
1. 字符串转对象 --> obj = JSON.parse(string)
2. 对象转字符串 --> s = JSON.stringify(obj)
4. Math对象
5. RegExp(正则)
1. 两种定义方式:
1. new RegExp("^[a-zA-Z][a-zA-Z0-9_]{5,11}$")
2. /new RegExp("^[a-zA-Z][a-zA-Z0-9_]{5,11}$")/
2. 匹配模式
1. g 全局
2. i 忽略大小写
3. 坑
1. 正则表达式中间不能加空格
2. .test() --> .test(undefined) --> .test("undefined")
3. 全局模式下会有一个lastIndex属性
3. 今日作业
1. 把博客上Date的小练习写完 http://www.cnblogs.com/liwenzhou/p/8004649.html
2. 整理博客
3. Python复习 *****
1. 把博客上Date的小练习写完 http://www.cnblogs.com/liwenzhou/p/8004649.html
2. 整理博客
3. Python复习 *****
面试题 """ 有一个列表[11, 2, 3, 3, 7, 9, 11, 2, 3],去重并且保持原来的顺序. """ l1 = [11, 2, 3, 3, 7, 9, 11, 2, 3] ret = list(set(l1)) print(ret) ret.sort(key=l1.index) # 按值在l1中的索引进行排序 print(ret) l2 = [ {"name": "alex", "age": 36}, {"name": "GoldBoss", "age": 30}, {"name": "xiaoyima", "age": 18} ] # 课后作业 l2.sort(key=lambda x: x["age"]) print(l2)
1. 内容回顾
补充:
Number
parseInt("111")
parseFloat("11.11")
Number
parseInt("111")
parseFloat("11.11")
函数
函数的定义
一般函数定义:
function foo(a,b){
函数的代码块;
return 返回值
}
匿名函数:
var bar = function(){...}
立即执行函数:
(function(a,b){...})(实参1,实参2)
函数的参数:
不严谨(可传多,可传少,就是不报错)
arguments:函数内部可以通过arguments拿到所有的参数
作用域
函数内部可以调用函数外部的变量
函数外部无法访问函数内部的变量
词法分析
函数调用的一瞬间要做两部:
1. 分析(AO对象)
1. 先分析有没有参数,
2. 看看有没有局部变量
3. 看看有没有函数声明
2. 真正执行
取值都是从AO对象上找
自定义对象
定义的两种方法:
1. var p1 = {name: "xiaoqiang", age: 38}
2. var p2 = new Object();
p2.name = "xiaoqiang"
p2.age = 38;
遍历自定义对象方式:
for (var i in p1){
console.log(i);
console.log(p1[i]);
}
函数的定义
一般函数定义:
function foo(a,b){
函数的代码块;
return 返回值
}
匿名函数:
var bar = function(){...}
立即执行函数:
(function(a,b){...})(实参1,实参2)
函数的参数:
不严谨(可传多,可传少,就是不报错)
arguments:函数内部可以通过arguments拿到所有的参数
作用域
函数内部可以调用函数外部的变量
函数外部无法访问函数内部的变量
词法分析
函数调用的一瞬间要做两部:
1. 分析(AO对象)
1. 先分析有没有参数,
2. 看看有没有局部变量
3. 看看有没有函数声明
2. 真正执行
取值都是从AO对象上找
自定义对象
定义的两种方法:
1. var p1 = {name: "xiaoqiang", age: 38}
2. var p2 = new Object();
p2.name = "xiaoqiang"
p2.age = 38;
遍历自定义对象方式:
for (var i in p1){
console.log(i);
console.log(p1[i]);
}
内置对象和方法
1. Date
1. 生成对象
var d1 = new Date()
var d2 = new Date("2018-03-13")
2. 方法:
1. d1.toLocalString()
2. d1.toUTCString()
3. d1.getFullYear()
4. d1.getMonth() (0~11)
5. d1.getDay() (星期天是0)
6. ...
2. JSON
1. 字符串转JSON对象
var jsonObj = JSON.parse('{"name": "xiaoqiang", "age": 18}')
2. JSON对象转成字符串
var s = JSON.stringify(jsonObj)
3. Math
1. 略...
4. RegExp
1. 定义正则两种方式
1. var reObj1 = new RegExp("^[a-zA-Z][a-zA-Z0-9]{5,11}$");
2. var reObj2 = /^[a-zA-Z][a-zA-Z0-9]{5,11}$/
2. 常用方法
reObj1.test("将要被校验的字符串")
3. 正则的匹配模式
1. g --> 全局
"Alexdashabi".replace(/a/g, "呵呵")
2. i --> 不区分大小写
"Alexdashabi".replace(/a/i, "呵呵")
4. 几个坑
1. 正则表达式之间不能加空格
2. .test()不传值相当于.test(undefined)--> .test("undefined")
3. 全局匹配模式注意事项
var reObj = /Alex/g;
reObj.test("Alex") --> lastIndex属性被设置成下一位4
reObj.test("1234Alex") 就返回true
面试题:
引申出一个新的知识点:
.sort(key=...)
1. Date
1. 生成对象
var d1 = new Date()
var d2 = new Date("2018-03-13")
2. 方法:
1. d1.toLocalString()
2. d1.toUTCString()
3. d1.getFullYear()
4. d1.getMonth() (0~11)
5. d1.getDay() (星期天是0)
6. ...
2. JSON
1. 字符串转JSON对象
var jsonObj = JSON.parse('{"name": "xiaoqiang", "age": 18}')
2. JSON对象转成字符串
var s = JSON.stringify(jsonObj)
3. Math
1. 略...
4. RegExp
1. 定义正则两种方式
1. var reObj1 = new RegExp("^[a-zA-Z][a-zA-Z0-9]{5,11}$");
2. var reObj2 = /^[a-zA-Z][a-zA-Z0-9]{5,11}$/
2. 常用方法
reObj1.test("将要被校验的字符串")
3. 正则的匹配模式
1. g --> 全局
"Alexdashabi".replace(/a/g, "呵呵")
2. i --> 不区分大小写
"Alexdashabi".replace(/a/i, "呵呵")
4. 几个坑
1. 正则表达式之间不能加空格
2. .test()不传值相当于.test(undefined)--> .test("undefined")
3. 全局匹配模式注意事项
var reObj = /Alex/g;
reObj.test("Alex") --> lastIndex属性被设置成下一位4
reObj.test("1234Alex") 就返回true
面试题:
引申出一个新的知识点:
.sort(key=...)
2. 今日内容
1.BOM
1. location
1. location.href --> 获取当前的URL
2. location.href="http://www.luffycity.com" --> 跳转到指定网址
3. location.reload() --> 重新加载当前页面
2. setTimeout和clearTimeout
多少毫秒之后做什么事儿
3. setInterval和clearInterval
每隔多少毫秒之后做什么事儿
2.DOM
1. 什么是DOM树
2. DOM都有哪一些内容
3. JS操作DOM
1. 找标签
1. 基本查找
1. 根据ID找标签(有且只能找到一个)
document.getElementById("ID值")
2. 根据class名字找(找到的可以是多个)
document.getElementsByClassName("class值")
3. 根据标签名找(找到的可以是多个)
document.getElementsByTagName("标签名")
2. 间接查找
1. 找父标签
document.parentElement
2. 找子标签(找到的可能是多个)
document.children
3. 第一个子标签
4. 最后一个子标签
5. 前一个兄弟标签
6. 后一个兄弟标签
2. 创建标签 *****
creatElement("标签名")
3. 添加标签
1. 在内部的最后添加
appendChild("标签名")
2. 在内部的某个标签的前面插入
insertBefore(要插入的新标签, 哪个标签之前)
4. 属性(内置属性)
.属性名="属性值"
自定义的属性只能用:
.setAttribute("s9", "hao")
.getAttribute("s9")
.removeAttribute("s9")
5. 文本操作
1. 设置文本的内容
.innerText=""
2. 设置标签内容
.innerHTML="<p>我是p标签</p>"
3. 获取值的区别
1. .innerHTML --> 子标签和子标签的内容都取出来
2. .innerText --> 只取标签之间的文本内容
6. 样式操作
1. 通过class修改
1. classList.remove(cls) 删除指定类
2. classList.add(cls) 添加类
3. classList.contains(cls) 存在返回true,否则返回false
4. classList.toggle(cls) 存在就删除,否则添加
5. className 获取所有样式类名(字符串)
2. 通过.style修改
1. 有中横线的
.style.backgroundColor
2. 没有中横线的
.style.color
1.BOM
1. location
1. location.href --> 获取当前的URL
2. location.href="http://www.luffycity.com" --> 跳转到指定网址
3. location.reload() --> 重新加载当前页面
2. setTimeout和clearTimeout
多少毫秒之后做什么事儿
3. setInterval和clearInterval
每隔多少毫秒之后做什么事儿
2.DOM
1. 什么是DOM树
2. DOM都有哪一些内容
3. JS操作DOM
1. 找标签
1. 基本查找
1. 根据ID找标签(有且只能找到一个)
document.getElementById("ID值")
2. 根据class名字找(找到的可以是多个)
document.getElementsByClassName("class值")
3. 根据标签名找(找到的可以是多个)
document.getElementsByTagName("标签名")
2. 间接查找
1. 找父标签
document.parentElement
2. 找子标签(找到的可能是多个)
document.children
3. 第一个子标签
4. 最后一个子标签
5. 前一个兄弟标签
6. 后一个兄弟标签
2. 创建标签 *****
creatElement("标签名")
3. 添加标签
1. 在内部的最后添加
appendChild("标签名")
2. 在内部的某个标签的前面插入
insertBefore(要插入的新标签, 哪个标签之前)
4. 属性(内置属性)
.属性名="属性值"
自定义的属性只能用:
.setAttribute("s9", "hao")
.getAttribute("s9")
.removeAttribute("s9")
5. 文本操作
1. 设置文本的内容
.innerText=""
2. 设置标签内容
.innerHTML="<p>我是p标签</p>"
3. 获取值的区别
1. .innerHTML --> 子标签和子标签的内容都取出来
2. .innerText --> 只取标签之间的文本内容
6. 样式操作
1. 通过class修改
1. classList.remove(cls) 删除指定类
2. classList.add(cls) 添加类
3. classList.contains(cls) 存在返回true,否则返回false
4. classList.toggle(cls) 存在就删除,否则添加
5. className 获取所有样式类名(字符串)
2. 通过.style修改
1. 有中横线的
.style.backgroundColor
2. 没有中横线的
.style.color
7. 事件
1. 常用事件
1. onclick
2. ondbclick
3. onfocus
4. onblur
5.onchange
2. 绑定事件的方式
1. 在标签里直接写属性(onclick=foo())
2. 通过JS给标签绑定事件
3. this --> 代表的是触发事件的当前标签
1. 常用事件
1. onclick
2. ondbclick
3. onfocus
4. onblur
5.onchange
2. 绑定事件的方式
1. 在标签里直接写属性(onclick=foo())
2. 通过JS给标签绑定事件
3. this --> 代表的是触发事件的当前标签
""" Python模拟链式操作示例 """ class Foo(object): def __init__(self, name, age): self.name = name self.age = age def wang(self): print("旺旺~") return self def run(self): print("哒哒~哒哒~") return self f = Foo("二哥", 9000) # 链式操作 f.wang().run() # f2 = f.wang() # f2.run() f.run()
面试题 """ 问:执行完下面的代码后, l,m的内容分别是什么? """ def func(m): for k,v in m.items(): m[k+2] = v+2 m = {1: 2, 3: 4} l = m # 浅拷贝 from copy import deepcopy l2 = deepcopy(m) l[9] = 10 l2[90] = 100 # func(l) m[7] = 8 # 1. 在Python中遍历字典的时候能不能对字典本身做涉及键(key)的操作 # 2. 深浅拷贝的理解 print("l:", l) print("l2:", l2) print("m:", m)
1. 前情回顾
1. BOM
1. location相关
1. location.href
2. location.href="http://www.sogo.com"
3. location.reload()
2. DOM
1. DOM树的概念
2. JS通过DOM操作HTML
1. 改标签(标签的内容)
2. 改标签的属性
3. 改样式
4. 事件相关
3. 操作标签
1. JS查找标签
1. 直接查找
1. 通过ID document.getElementById("ID值")
2. 通过class找 document.getElementsByClassName("class名")
3. 通过标签名找 document.getElementsByTagName("标签名")
2. 间接查找
1. 找父标签
2. 找字标签们
3. 找第一个子标签
4. 找最后一个子标签
5. 找上一个兄弟标签
6. 找下一个兄弟标签
2. 创建标签
1. 语法:
document.createElement("标签名") *****
3. 添加标签
1. 在内部最后添加
父标签.appendChild(新创建的标签)
2. 在内部指定标签前面添加
父标签.insertBefore(新创建的标签,指定标签)
4. 删除标签
1. 从父标签里面删除指定的标签
父标签.removeChild(指定的标签)
5. 替换
1. 在父标签里面用新创建的标签替换指定标签
父标签.replaceChild(新创建的标签,指定的标签)
4. 操作标签的属性
1. 常用的属性 *****
1. innerHTML --> 全部(子标签及子标签的文本内容)
2. innerText --> 标签(子标签)的文本内容
2. 标签的属性
1. .setAttribute("age","18") --> 设置属性
2. .getAttribute("age") --> 获取属性的值
3. .removeAttribute("age") --> 删除指定的属性
对于标签默认的属性
1. a标签.href/img标签.src
2. a标签.href="http://www.sogo.com"/img标签.src="..."
5. 获取值(input/select/textarea)
input标签.value()
select标签.value()
textarea标签.value()
6. 操作标签的样式
1. 通过class名去改变样式
1. 获取标签所有样式类
1. .className --> 得到的是字符串
2. .classList --> 得到的是数组
2. 使用classList操作样式
1. .classList.contains("样式类") --> 判断包不包含指定的样式类
2. .classList.add("样式类") --> 添加指定的样式类
3. .classList.remove("样式类") --> 删除指定的样式类
4. .classList.toggle("样式类") --> 有就删除没有就添加
2. 通过.style直接修改CSS属性
1. CSS属性带中横线的
background-color: red;
.style.backgroundColor=green;
2. CSS属性中不带中横线的
.style.color=red;
7. 事件相关
0. 注意:
涉及到DOM操作的JS代码要放在body标签内部的最下面!!!
1. 绑定事件的方式
1. 在标签内通过属性来设置(onclick=foo(this))
this指的是当前触发事件的标签!!!
2. 通过JS代码绑定事件
2. 常用的事件
1. onclick 当用户点击某个对象时调用的事件句柄。
2. ondblclick 当用户双击某个对象时调用的事件句柄。
1. location相关
1. location.href
2. location.href="http://www.sogo.com"
3. location.reload()
2. DOM
1. DOM树的概念
2. JS通过DOM操作HTML
1. 改标签(标签的内容)
2. 改标签的属性
3. 改样式
4. 事件相关
3. 操作标签
1. JS查找标签
1. 直接查找
1. 通过ID document.getElementById("ID值")
2. 通过class找 document.getElementsByClassName("class名")
3. 通过标签名找 document.getElementsByTagName("标签名")
2. 间接查找
1. 找父标签
2. 找字标签们
3. 找第一个子标签
4. 找最后一个子标签
5. 找上一个兄弟标签
6. 找下一个兄弟标签
2. 创建标签
1. 语法:
document.createElement("标签名") *****
3. 添加标签
1. 在内部最后添加
父标签.appendChild(新创建的标签)
2. 在内部指定标签前面添加
父标签.insertBefore(新创建的标签,指定标签)
4. 删除标签
1. 从父标签里面删除指定的标签
父标签.removeChild(指定的标签)
5. 替换
1. 在父标签里面用新创建的标签替换指定标签
父标签.replaceChild(新创建的标签,指定的标签)
4. 操作标签的属性
1. 常用的属性 *****
1. innerHTML --> 全部(子标签及子标签的文本内容)
2. innerText --> 标签(子标签)的文本内容
2. 标签的属性
1. .setAttribute("age","18") --> 设置属性
2. .getAttribute("age") --> 获取属性的值
3. .removeAttribute("age") --> 删除指定的属性
对于标签默认的属性
1. a标签.href/img标签.src
2. a标签.href="http://www.sogo.com"/img标签.src="..."
5. 获取值(input/select/textarea)
input标签.value()
select标签.value()
textarea标签.value()
6. 操作标签的样式
1. 通过class名去改变样式
1. 获取标签所有样式类
1. .className --> 得到的是字符串
2. .classList --> 得到的是数组
2. 使用classList操作样式
1. .classList.contains("样式类") --> 判断包不包含指定的样式类
2. .classList.add("样式类") --> 添加指定的样式类
3. .classList.remove("样式类") --> 删除指定的样式类
4. .classList.toggle("样式类") --> 有就删除没有就添加
2. 通过.style直接修改CSS属性
1. CSS属性带中横线的
background-color: red;
.style.backgroundColor=green;
2. CSS属性中不带中横线的
.style.color=red;
7. 事件相关
0. 注意:
涉及到DOM操作的JS代码要放在body标签内部的最下面!!!
1. 绑定事件的方式
1. 在标签内通过属性来设置(onclick=foo(this))
this指的是当前触发事件的标签!!!
2. 通过JS代码绑定事件
2. 常用的事件
1. onclick 当用户点击某个对象时调用的事件句柄。
2. ondblclick 当用户双击某个对象时调用的事件句柄。
3. onfocus 元素获得焦点。 // 练习:搜索框
4. onblur 元素失去焦点。 应用场景:用于表单验证,用户离开某个输入框时,代表已经输入完了,我们可以对它进行验证.
5. onchange 域的内容被改变。 (select联动示例)
3. 今日面试题
4. onblur 元素失去焦点。 应用场景:用于表单验证,用户离开某个输入框时,代表已经输入完了,我们可以对它进行验证.
5. onchange 域的内容被改变。 (select联动示例)
3. 今日面试题
2. 今日内容(非常重要)
1. jQuery
1. 为什么要学jQuery? MySQL Python
做同样的事情 jQuery写起来极其简练 (write less, do more.)
2. jQuery是什么?
jQuery相当于Python的第三方模块
第三方模块其实就是别人写好(封装)的一些代码,我们拿过来用(按照别人定好的规则)
原生的JS DOM操作是基础
3. jQuery学习的内容
1. 改变标签
2. 改变标签的属性
3. 改变标签的样式
4. 事件相关
学习内容:(先导入再使用)
0. HTML对象和jQuery对象的区别
1. jQuery对象转换成DOM对象,用索引取出具体的标签
2. DOM对象转换成jQuery对象,$(DOM对象)
注意:
jQuery对象保存到变量的时候,变量名要加$前缀
1. 找标签
1. 基本选择器
1. $("ID值")
2. $(".class名")
3. $("标签名")
4. $("*") 找所有
5. $("条件1,条件2") 组合查找
2. 层级选择器
同CSS选择器
1. $("x y");// x的所有后代y(子子孙孙)
2. $("x > y");// x的所有儿子y(儿子)
3. $("x + y")// 找到所有紧挨在x后面的y
4. $("x ~ y")// x之后所有的兄弟y
3. 基本筛选器
1. :first // 第一个
2. :last // 最后一个
3. :eq(index)// 索引等于index的那个元素
4. :even // 匹配所有索引值为偶数的元素,从 0 开始计数
5. :odd // 匹配所有索引值为奇数的元素,从 0 开始计数
6. :gt(index)// 匹配所有大于给定索引值的元素
7. :lt(index)// 匹配所有小于给定索引值的元素
8. :not(元素选择器)// 移除所有满足not条件的标签
9. :has(元素选择器)// 选取所有包含一个或多个标签在其内的标签(指的是从后代元素找)
4. 属性选择器
1. [attribute]
2. [attribute=value]// 属性等于
3. [attribute!=value]// 属性不等于
5. 表单选择器
:text
:password
:file
:radio
:checkbox
1. jQuery
1. 为什么要学jQuery? MySQL Python
做同样的事情 jQuery写起来极其简练 (write less, do more.)
2. jQuery是什么?
jQuery相当于Python的第三方模块
第三方模块其实就是别人写好(封装)的一些代码,我们拿过来用(按照别人定好的规则)
原生的JS DOM操作是基础
3. jQuery学习的内容
1. 改变标签
2. 改变标签的属性
3. 改变标签的样式
4. 事件相关
学习内容:(先导入再使用)
0. HTML对象和jQuery对象的区别
1. jQuery对象转换成DOM对象,用索引取出具体的标签
2. DOM对象转换成jQuery对象,$(DOM对象)
注意:
jQuery对象保存到变量的时候,变量名要加$前缀
1. 找标签
1. 基本选择器
1. $("ID值")
2. $(".class名")
3. $("标签名")
4. $("*") 找所有
5. $("条件1,条件2") 组合查找
2. 层级选择器
同CSS选择器
1. $("x y");// x的所有后代y(子子孙孙)
2. $("x > y");// x的所有儿子y(儿子)
3. $("x + y")// 找到所有紧挨在x后面的y
4. $("x ~ y")// x之后所有的兄弟y
3. 基本筛选器
1. :first // 第一个
2. :last // 最后一个
3. :eq(index)// 索引等于index的那个元素
4. :even // 匹配所有索引值为偶数的元素,从 0 开始计数
5. :odd // 匹配所有索引值为奇数的元素,从 0 开始计数
6. :gt(index)// 匹配所有大于给定索引值的元素
7. :lt(index)// 匹配所有小于给定索引值的元素
8. :not(元素选择器)// 移除所有满足not条件的标签
9. :has(元素选择器)// 选取所有包含一个或多个标签在其内的标签(指的是从后代元素找)
4. 属性选择器
1. [attribute]
2. [attribute=value]// 属性等于
3. [attribute!=value]// 属性不等于
5. 表单选择器
:text
:password
:file
:radio
:checkbox
:submit
:reset
:button
6. 筛选器
1. 上一个
2. 下一个
3. 父元素
4. 儿子和兄弟
7. .find()
注意应用场景
2. 操作标签
1. 操作class类
1. addClass()
2. removeClass()
3. hasClass()
4. toggleClass()
:reset
:button
6. 筛选器
1. 上一个
2. 下一个
3. 父元素
4. 儿子和兄弟
7. .find()
注意应用场景
2. 操作标签
1. 操作class类
1. addClass()
2. removeClass()
3. hasClass()
4. toggleClass()
面试题 """ %和format的区别 http://www.cnblogs.com/liwenzhou/p/8570701.html """ c = (250, 250) command1 = "二营长,向他开炮: 敌人坐标:%s" % (c, ) print(command1) command2 = "二营长,向他开炮: 敌人坐标:{}".format(c) print(command2) print(f"二营长,向他开炮: 敌人坐标:{c}") class Person(object): def __init__(self, name, age): self.name = name self.age = age def __str__(self): return "{self.name} is {self.age} years old.".format(self=self) p1 = Person("Alex", 9000) print(p1) data = [11, 22] print("{0} --- {0}".format(data)) print("{0[0]} --- {0[0]}".format(data)) print("{0[0]} --- {0[1]}".format(data)) print("{:>10}".format(18)) print("{:0>10}".format(18)) print("{:A>10}".format(18)) print("18".zfill(10)) print("{:.4f}".format(3.1415926)) print("{:,}".format(1234567890))
1. 内容回顾
1. jQuery
1. 选择器 $("")
1. 基本选择器
1. ID --> $("#d1")
2. 标签名 --> $("p")
3. class名 --> $(".C1")
4. 通用的 --> $("*")
5. 组合 --> $(".c1,div,a")
2. 层级选择器
1. 子子孙孙 --> $("x y")
2. 儿子选择器 --> $("x>y")
3. 弟弟选择器 --> $("x~y")
4. 毗邻选择器 --> $("label+input")
1. 选择器 $("")
1. 基本选择器
1. ID --> $("#d1")
2. 标签名 --> $("p")
3. class名 --> $(".C1")
4. 通用的 --> $("*")
5. 组合 --> $(".c1,div,a")
2. 层级选择器
1. 子子孙孙 --> $("x y")
2. 儿子选择器 --> $("x>y")
3. 弟弟选择器 --> $("x~y")
4. 毗邻选择器 --> $("label+input")
2. 筛选器
1. 基本筛选器
1. :first
2. :last
3. :eq() --> 从0开始
4. :even --> 偶数
5. :odd --> 奇数
6. :gt
7. :lt
8. :not --> $("div:not(.c1)")
9. :has --> $("div:has(.c1)")
2. 属性选择器
1. $("[title]")
2. $("[type='text']")
3. $("[type!='text']")
3. 表单选择器
1. $(":checkbox") --> $("input[type='checkbox']")
2. $(":text")
...
4. 表单对象
1. $(":disabled") --> 找到不可用的标签
...
5. 筛选器方法(只是应用场景和上面的基本筛选器不同而已)
1. $("div").first()
2. ...
6. 常用的方法
1. .next() --> 找到挨着我的下一个同级标签
2. .nextAll() --> 下边同级的所有
3. .nextUntil()--> 往下找,直到找到终止条件为止
4. .prev()
5. .prevAll()
6. .prevUntil()
7. .siblings() --> 找所有的兄弟(前面的后面的都能找到)
8. .children()
9. .parent()
10. .parents()
11. .parentsUntil()
12. .find(各种条件都可以写)
3. 样式操作
1. 操作class类
1. .addClass()
2. .removeClass()
3. .hasClass()
4. .toggleClass()
2. 今日面试题
1. 问: 字符串格式化:%和format 有什么区别?
Python新版本推荐使用format.
Python2.6 新加入的format语法支持.
3.6加入了一个 f-strings新特性
3. 今日内容 (http://www.bootcdn.cn/) PyCon meetingup (关注一下时事热点技术)
1. 基本筛选器
1. :first
2. :last
3. :eq() --> 从0开始
4. :even --> 偶数
5. :odd --> 奇数
6. :gt
7. :lt
8. :not --> $("div:not(.c1)")
9. :has --> $("div:has(.c1)")
2. 属性选择器
1. $("[title]")
2. $("[type='text']")
3. $("[type!='text']")
3. 表单选择器
1. $(":checkbox") --> $("input[type='checkbox']")
2. $(":text")
...
4. 表单对象
1. $(":disabled") --> 找到不可用的标签
...
5. 筛选器方法(只是应用场景和上面的基本筛选器不同而已)
1. $("div").first()
2. ...
6. 常用的方法
1. .next() --> 找到挨着我的下一个同级标签
2. .nextAll() --> 下边同级的所有
3. .nextUntil()--> 往下找,直到找到终止条件为止
4. .prev()
5. .prevAll()
6. .prevUntil()
7. .siblings() --> 找所有的兄弟(前面的后面的都能找到)
8. .children()
9. .parent()
10. .parents()
11. .parentsUntil()
12. .find(各种条件都可以写)
3. 样式操作
1. 操作class类
1. .addClass()
2. .removeClass()
3. .hasClass()
4. .toggleClass()
2. 今日面试题
1. 问: 字符串格式化:%和format 有什么区别?
Python新版本推荐使用format.
Python2.6 新加入的format语法支持.
3.6加入了一个 f-strings新特性
3. 今日内容 (http://www.bootcdn.cn/) PyCon meetingup (关注一下时事热点技术)
1. 修改样式
1. 操作class类
自定义模态框弹出和隐藏
2. 直接修改样式
1. 原生DOM .style.color="green"
2. $("div").css("color", "green")
3. 修改多个样式时,传入键值对!!!
3. 位置
1. offset
2. position --> 获取相对父标签的偏移位置
3. scrollTop()// 获取匹配元素相对滚动条顶部的偏移
4. scrollLeft()// 获取匹配元素相对滚动条左侧的偏移
返回顶部示例
4. 大小
1. height()
2. width()
3. innerHeight()
4. innerWidth()
5. outerHeight()
6. outerWidth()
注意:outerHeight()和outerWidth()取得是内容+padding+border
2. 文档操作
1. 操作HTML
.html() --> 类似于 innerHTML
2. 操作text
.text() --> 类似于 innerText
3. 值
1. val()// 取得第一个匹配元素的当前值
2. val(val)// 设置所有匹配元素的值
3. 属性操作
1. attr()
1. attr(attrName)// 返回第一个匹配元素的属性值
2. attr(attrName, attrValue)// 为所有匹配元素设置一个属性值
3. attr({k1: v1, k2:v2})// 为所有匹配元素设置多个属性值
4. removeAttr()// 从每一个匹配的元素中删除一个属性
2. prop() --> checkbox和radio用这个
4. 作业
1全选反选取消
1. 操作class类
自定义模态框弹出和隐藏
2. 直接修改样式
1. 原生DOM .style.color="green"
2. $("div").css("color", "green")
3. 修改多个样式时,传入键值对!!!
3. 位置
1. offset
2. position --> 获取相对父标签的偏移位置
3. scrollTop()// 获取匹配元素相对滚动条顶部的偏移
4. scrollLeft()// 获取匹配元素相对滚动条左侧的偏移
返回顶部示例
4. 大小
1. height()
2. width()
3. innerHeight()
4. innerWidth()
5. outerHeight()
6. outerWidth()
注意:outerHeight()和outerWidth()取得是内容+padding+border
2. 文档操作
1. 操作HTML
.html() --> 类似于 innerHTML
2. 操作text
.text() --> 类似于 innerText
3. 值
1. val()// 取得第一个匹配元素的当前值
2. val(val)// 设置所有匹配元素的值
3. 属性操作
1. attr()
1. attr(attrName)// 返回第一个匹配元素的属性值
2. attr(attrName, attrValue)// 为所有匹配元素设置一个属性值
3. attr({k1: v1, k2:v2})// 为所有匹配元素设置多个属性值
4. removeAttr()// 从每一个匹配的元素中删除一个属性
2. prop() --> checkbox和radio用这个
4. 作业
1全选反选取消
面试题 # 可变对象不能做关键字参数 # def foo(arg, li=[]): # li.append(arg) # return li # # list1 = foo(21) # list2 = foo(21, [1,]) # list3 = foo(28) # # print(list1) # print(list2) # print(list3) # li.append()没有返回值 def foo(arg, li=[]): return li.append(arg) list1 = foo(21) list2 = foo(21, [1,]) list3 = foo(28) print(list1) print(list2) print(list3) # list5 = [11, 22, 33, 44, 55] # print(list5[10:]) # 打乱列表的顺序 # import random # random.shuffle(list5) # print(list5)
1. 内容回顾
1. 样式操作
1. 操作class
2. 操作CSS属性的
.css("color")
.css("color", "green")
.css({"color": "yellow", "border": "1px solid black"})
2. 位置相关
1. .offset()
2. .position() --> 相对于定位的父标签的偏移
3. .scrollTop() --> 返回顶部
$(window).scroll(function(){
...
// 判断窗口距离top有多少
if ($(window).scrollTop() > 100){
// 把返回顶部的按钮显示出来, removeClass("hide");
}
})
// 返回顶部的按钮,要做的事儿
$("返回顶部按钮").click(function(){
// $(window).scrollTop(0);
})
4. .scrollLeft()
3. 尺寸
1. height
2. width
3. innerHeight
4. innerWidth
5. outerHeight
6. outerWidth
4. 文本操作
1. .html() --> 子标签和文本内容
.html("<a href="...">我是a标签</a>")
2. .text() --> 所有的文本内容
3. .val()
获取用户输入的值
$(":text").val()
$(":checked").val() --> 默认返回的都是第一个标签的值
$("#s1").val() --> select可以直接取选中的值,多选的select返回的是数组格式
$("#t1").val() --> textarea和input:text类似
5. 属性操作
1. .attr() --> $("a").attr("href")
$("a").attr("href", "http://www.sogo.com")
$("a").attr({"href":"http://www.sogo.com", "title": "aaaa"})
2. .prop() --> 适用于checkbox和radio(返回true或false的属性)
2. 今日内容
1. 文档操作
2. 事件 *****
1. 目前为止学过的绑定事件的方式
1. 在标签里面写 onclick=foo(this);
2. 原生DOM的JS绑定 DOM对象.onclick=function(){...}
3. jQuery版的绑定事件 jQuery对象.click(function(){...})
2. 我们今后要用的jQuery绑定事件的方式
.on("click", function(){...})
$("#t1").on("click", "选择器", function(){...})
适用于 给未来的元素(页面生成的时候还没有的标签) 绑定事件 (事件委托)
事件冒泡和事件捕获
利用事件冒泡,给已经存在的标签绑定事件,用来捕获后代标签的事件.
1. 样式操作
1. 操作class
2. 操作CSS属性的
.css("color")
.css("color", "green")
.css({"color": "yellow", "border": "1px solid black"})
2. 位置相关
1. .offset()
2. .position() --> 相对于定位的父标签的偏移
3. .scrollTop() --> 返回顶部
$(window).scroll(function(){
...
// 判断窗口距离top有多少
if ($(window).scrollTop() > 100){
// 把返回顶部的按钮显示出来, removeClass("hide");
}
})
// 返回顶部的按钮,要做的事儿
$("返回顶部按钮").click(function(){
// $(window).scrollTop(0);
})
4. .scrollLeft()
3. 尺寸
1. height
2. width
3. innerHeight
4. innerWidth
5. outerHeight
6. outerWidth
4. 文本操作
1. .html() --> 子标签和文本内容
.html("<a href="...">我是a标签</a>")
2. .text() --> 所有的文本内容
3. .val()
获取用户输入的值
$(":text").val()
$(":checked").val() --> 默认返回的都是第一个标签的值
$("#s1").val() --> select可以直接取选中的值,多选的select返回的是数组格式
$("#t1").val() --> textarea和input:text类似
5. 属性操作
1. .attr() --> $("a").attr("href")
$("a").attr("href", "http://www.sogo.com")
$("a").attr({"href":"http://www.sogo.com", "title": "aaaa"})
2. .prop() --> 适用于checkbox和radio(返回true或false的属性)
2. 今日内容
1. 文档操作
2. 事件 *****
1. 目前为止学过的绑定事件的方式
1. 在标签里面写 onclick=foo(this);
2. 原生DOM的JS绑定 DOM对象.onclick=function(){...}
3. jQuery版的绑定事件 jQuery对象.click(function(){...})
2. 我们今后要用的jQuery绑定事件的方式
.on("click", function(){...})
$("#t1").on("click", "选择器", function(){...})
适用于 给未来的元素(页面生成的时候还没有的标签) 绑定事件 (事件委托)
事件冒泡和事件捕获
利用事件冒泡,给已经存在的标签绑定事件,用来捕获后代标签的事件.
3. 事件之间
1. 阻止后续事件的执行
显式的写 return false;
2. for循环,退出当前循环 ---> 用break;
4. 补充一个键盘事件
示例:批量操作的
5. DOM加载完之后执行
$(document).ready(function(){
// 写绑定事件的具体操作
});
6. 动画(了解即可)
3. jQuery补充
1. .each循环
1. $.each(a1, function(){...})
2. $("div").each(function(){
console.log(this); --> this指的是每次进入循环的标签
})
2. .data
1. 可以存字符串
2. 可以存数字
3. 可以存jQuery对象
3. 插件机制
1. 给具体的jQuery对象添加扩展
$.fn.extend({
"s9": function(){
...
}
})
2. 给jQuery添加全局扩展
$.extend({
"s9": function(){
...
}
})
3. 作业
1. 把课上内容整理博客
2. 把课上的批量操作示例自己写一遍
3. 表格版增删改查
4. 复习Python基础
1. 内容回顾
1. jQuery
1. 查找标签
1. 选择器
1. 基本 *****
2. 层级 *****
3. 组合 *****
4. 基本的筛选 *****
5. 属性 *****
6. 表单 *****
7. 上一个
8. 下一个
9. 父标签
10. 子标签
11. 兄弟标签
1. jQuery
1. 查找标签
1. 选择器
1. 基本 *****
2. 层级 *****
3. 组合 *****
4. 基本的筛选 *****
5. 属性 *****
6. 表单 *****
7. 上一个
8. 下一个
9. 父标签
10. 子标签
11. 兄弟标签
2. 操作
1. 创建标签 --> 添加到文档树中
2. 修改标签(文本,属性,值)
3. 删除标签
4. 修改样式
1. 修改class
2. 直接修改CSS属性
3. 补充
1. .each
1. $.each([11,22,33,44],function(k,v){
console.log(k,v);
})
2. $("div").each(function(){
console.log(this); // 当前循环中的div标签,是一个DOM对象
})
2. .data
我们可以给任意的jQuery对象保存数据.
$("body").data("k1", "v1");
$("body").data("k2", "v2");
$("body").data("k1");
$("body").removeData("k1") --> 删除k1的值
3. 插件机制(了解即可)
1. 创建标签 --> 添加到文档树中
2. 修改标签(文本,属性,值)
3. 删除标签
4. 修改样式
1. 修改class
2. 直接修改CSS属性
3. 补充
1. .each
1. $.each([11,22,33,44],function(k,v){
console.log(k,v);
})
2. $("div").each(function(){
console.log(this); // 当前循环中的div标签,是一个DOM对象
})
2. .data
我们可以给任意的jQuery对象保存数据.
$("body").data("k1", "v1");
$("body").data("k2", "v2");
$("body").data("k1");
$("body").removeData("k1") --> 删除k1的值
3. 插件机制(了解即可)
只要思想不滑坡,方法总比困难多!
复习装饰器!!!
2. 今日内容
1. Bootstrap
1. 栅格系统
0. 包含在container里面
1. 每一行(row)均分成12列(col-xx-**)必须放在row中),
2. 每一个标签可以自定义占的列数(col-xx-**)
列偏移
列排序
2. 常用样式
https://v3.bootcss.com/css/
1. 栅格系统
0. 包含在container里面
1. 每一行(row)均分成12列(col-xx-**)必须放在row中),
2. 每一个标签可以自定义占的列数(col-xx-**)
列偏移
列排序
2. 常用样式
https://v3.bootcss.com/css/
3. 今日作业
1. 登录页面
2. 信息收集卡