[TOC]
### 使得所有的P标签背景色在点击按钮后改变
```
~~~
<style>
div{
width: 300px;
height: 500px;
border: 1px solid red;
}
</style>
~~~
~~~
<input type="button" value="变色" id="btn"/>
<div id="dv">
<span>这是span</span>
<p>这是p</p>
<span>这是span</span>
<p>这是p</p>
<span>这是span</span>
<p>这是p</p>
<span>这是span</span>
<a href="http://www.baidu.com">百度</a>
</div>
~~~
~~~
var btn = my$("btn");
btn.onclick = function () {
var inputs = my$("dv").childNodes;/!*获取所有的子节点 返回值是个数组*!/
for(var i=0;i<inputs.length;i++){/!*循环遍历获得所有的子节点*!/
if(inputs[i].nodeType == 1 && inputs[i].nodeName == "P"){/!*判断子节点是不是标签节点同时节点名字是不是p标签 (判断的是结果 所以是大写的P)*!/
inputs[i].style.backgroundColor = "pink";/!*满足条件背景改变*!/
}
}
}
~~~
```
### 奇红偶黄
```
~~~
<input type="button" value="变色" id="btn"/>
<div>
<ul id="uu">
<li>西施</li>
<li>昭君</li>
<li>貂蝉</li>
<li>玉环</li>
<li>芙蓉姐姐</li>
</ul>
</div>
~~~
~~~
<script>
var btn = my$("btn");/*获取事件源*/
btn.onclick = function () {/*点击事件*/
var nodes = my$("uu").childNodes;/*获取里面的所有的子节点 返回值是个数组*/
var num = 0;/*记录li的个数 从0开始 类似于索引下标*/
for(var i=0;i<nodes.length;i++){
// 遍历循环,拿到所有的节点
if(nodes[i].nodeType == 1 && nodes[i].nodeName == "LI"){/*判断节点是不是标签节点 同时是不是li*/
nodes[i].style.backgroundColor = num%2 == 0? "red" : "yellow";/*判断li的索引。从索引的值去判断奇偶*//*满足条件为红,不然则是黄*/
num ++;/*li的索引+1*/
}
}
}
~~~
</script>
```
### 点击切换背景图
```
~~~
<style>
* {
margin: 0px;
padding: 0px;
}
body {
background-image: url("images/1.jpg");
}
#mask {
background-color: rgba(255, 255, 255, 0.3);
height: 200px;
text-align: center;
}
#mask img {
width: 200px;
margin-top: 35px;
cursor: pointer;
}
</style>
~~~
<div id="mask">
<img src="images/1.jpg" alt="">
<img src="images/2.jpg" alt="">
<img src="images/3.jpg" alt="">
</div>
~~~~~~
var nodes = my$("mask").children;/*获取里面的子级元素 返回值是个数组 3个img*/
for(var i=0;i<nodes.length;i++){/*循环获取所有的元素*/
nodes[i].onclick = function () {/*给每个img 做点击事件*/
document.body.style.backgroundImage = "url(\""+this.src+"\")";/*body背景图改变*/
}
}
~~~
```
### 点击按钮创建列表
```
~~~
div {
width: 300px;
height: 400px;
border: 1px solid #ccc;
}
ul{
list-style: none;
}
~~~
<input type="button" value="创建列表" id="btn"/>
<div id="dv"></div>
var names = ["杨过", "郭靖", "张无忌", "张三丰", "乔峰", "段飞", "丁棚"];
my$("btn").onclick = function () {
var str = "<ul>";/*str中加上<ul>*/
for(var i =0 ;i<names.length;i++){/*获取names的值*/
str += "<li>"+names[i]+"</li>"/*取每个值拼接上li*/
}
str += "</ul>";/*加上右面的</ul>*/
my$("dv").innerHTML = str;/*把内容加入到HTML中 吃标签*/
var list = my$("dv").getElementsByTagName("li");/*获取所有的li*/
for(var i= 0;i<list.length;i++){/*循环所有的li*/
list[i].onmouseover = function () {/*鼠标经过事件*/
this.style.backgroundColor = "red";/*背景色改变*/
};
list[i].onmouseout = function () {/*鼠标离开事件*/
this.style.backgroundColor = "";/*背景色结束*/
}
}
}
~~~
```
### 全选和反选
```
~~~
<style>
* {
padding: 0;
margin: 0;
}
.wrap {
width: 300px;
margin: 100px auto 0;
}
table {
border-collapse: collapse;
border-spacing: 0;
border: 1px solid #c0c0c0;
width: 00px;
}
th,
td {
border: 1px solid #d0d0d0;
color: #404060;
padding: 10px;
}
th {
background-color: #09c;
font: bold 16px "微软雅黑";
color: #fff;
}
td {
font: 14px "微软雅黑";
}
tbody tr {
background-color: #f0f0f0;
}
tbody tr:hover {
cursor: pointer;
background-color: #fafafa;
}
</style>
~~~
~~~
<div class="wrap">
<table>
<thead>
<tr>
<th>
<input type="checkbox" id="j_cbAll"/>
</th>
<th>菜名</th>
<th>饭店</th>
</tr>
</thead>
<tbody id="j_tb">
<tr>
<td>
<input type="checkbox"/>
</td>
<td>红烧肉</td>
<td>田老师</td>
</tr>
<tr>
<td>
<input type="checkbox"/>
</td>
<td>西红柿鸡蛋</td>
<td>田老师</td>
</tr>
<tr>
<td>
<input type="checkbox"/>
</td>
<td>油炸榴莲</td>
<td>田老师</td>
</tr>
<tr>
<td>
<input type="checkbox"/>
</td>
<td>清蒸助教</td>
<td>田老师</td>
</tr>
</tbody>
</table>
</div>
var cak = my$("j_cbAll");/!*获取全选的元素 事件源*!/
var cks = my$("j_tb").getElementsByTagName("input");/!*获取下面的选框 返回值是个集合*!/
cak.onclick = function () {/!*给事件源做点击事件*!/
for(var i = 0;i<cks.length;i++){/!*循环遍历*!/
cks[i].checked = this.checked;/!*小选框的状态等于全选框的状态*!/
}
};
for(var i = 0;i<cks.length;i++){/!*循环获取小的复选框*!/
cks[i].onclick = function () {/!*给所有的小复选框做点击事件*!/
var flag = true;/!*假设选中*!/
for(var j =0;j<cks.length;j++){/!*循环所有的小复选框,查看状态*!/
// 选中是true 在判断条件中取反为false不会进入 在选中状态为false时,取反后为true 进入判断
if( !cks[j].checked){/!* *!/
flag = false;/!*改了flag的值*!/
break;
}
}
cak .checked = flag;/!*全选的复选的转态*!/
}
}
~~~
```
### 动态创建表格
```
<style>
div{
width: 200px;
height: 200px;
border: 1px solid red;
}
</style>
<input type="button" value="创建表格" id="btn"/>
<div id="dv"></div>
var arr=[
{name:"百度",href:"http://www.baidu.com"},
{name:"谷歌",href:"http://www.google.com"},
{name:"优酷",href:"http://www.youku.com"},
{name:"土豆",href:"http://www.tudou.com"},
{name:"快播",href:"http://www.kuaibo.com"},
{name:"爱奇艺",href:"http://www.aiqiyi.com"}
];
//点击按钮创建表格
my$("btn").onclick=function () {
//创建table加入到div中
var tableObj=document.createElement("table");
tableObj.border="1";
tableObj.cellPadding="0";
tableObj.cellSpacing="0";
my$("dv").appendChild(tableObj);
//创建行,把行加入到table中
for(var i=0;i<arr.length;i++){
var dt=arr[i];//每个对象
var trObj=document.createElement("tr");
tableObj.appendChild(trObj);
//创建第一个列,然后加入到行中
var td1=document.createElement("td");
td1.innerText=dt.name;
trObj.appendChild(td1);
//创建第二个列
var td2=document.createElement("td");
td2.innerHTML="<a href="+dt.href+">"+dt.name+"</a>";
trObj.appendChild(td2);
}
};
```
```
- Javascript
- 组成
- Web API
- 初步认识DOM
- 经典案例 (使用获取id的方法)
- 节点和元素
- 经典案例 (使用获取节点和元素的方法)
- 函数
- 作用域链
- Array对象的方法
- String对象的方法
- 绑定事件
- 事件委托
- 逻辑运算
- js高级(面向对象、)
- 基本知识
- 数据类型
- 基本包装类型的使用
- 定义变量的区别
- JavaScript对象的动态特性
- 关键字in
- 关键字delete
- 运算符
- 创建对象的方式
- 回调函数
- 高阶函数
- 构造器属性
- this指向
- hasOwnProperty属性
- 私有成员和特权方法
- 面向对象和面向过程的基础
- 异常捕获
- 构造函数和普通函数的区别
- 构造函数的补充
- 原型
- 原型图
- 获取原型对象的方法
- 原型对象的访问和设置
- 判断某个对象是否是指定实例对象的原型对象
- constructor
- isPrototypeOf
- instanceof
- 检测对象是公有还是私有
- 核心概念
- 继承
- 混入式继承
- 原型式继承
- 原型链继承
- 借用构造函数继承(call继承,经典继承)
- 组合式继承(推荐)
- class继承
- __ proto __属性
- call方法和apply方法
- Fuction相关知识
- 创建函数的方式
- eval函数
- 浅拷贝和深拷贝
- 浅拷贝
- 深拷贝
- Object相关知识
- Object原型属性和方法
- Object静态成员对象
- 案例
- 数组去重
- 闭包
- 语法
- DOM事件和闭包
- 定时器和闭包
- 即使对象初始化
- 闭包的变形
- 设计模式
- 单例模式
- 发布订阅模式(观察者模式)
- 工厂模式
- 命名空间模式
- 同步和异步
- 垃圾回收机制
- get和set
- JQuery
- 动画方法
- 事件
- 方法
- 节点
- 方法er
- HTML + CSS
- 经验
- flex布局
- px,em ,rem区别
- 清除浮动
- Less
- UI框架
- 一.Bootstrap框架
- 常用类名
- 二 .Animate.css
- 三.WOW.JS
- 四.scrollReveal.js
- 五.zepto框架
- zepto选择器
- 滑动事件
- tap触摸事件
- zepto动画
- 六,swipe框架
- 分页器
- 左右按钮和循环轮播
- 底部滚动和轮播方向
- 自动播放和切换效果
- 移入移除事件
- swipe结合animate.css
- 总结
- 滚滚屏
- 自动化构建工具
- 1.gulp
- 使用gulp编译less成css,并最终压缩css
- 压缩css
- 合并和压缩js
- 压缩图片
- 编写server服务
- 包管理器
- 介绍
- brew
- npm十全大补汤
- ES6
- class类
- class类的使用
- class类的继承结构
- let 和const
- 结构语法
- 模板字符串
- 化简写法
- 形参的默认值
- ...rest参数
- rest剩余参数
- 扩展参数
- 正则表达式
- 创建正则表达式的方式
- 构造函数
- 字面量的方式
- 其他(修饰符)
- 判断是否匹配成功
- 正则表达式案例
- 常见的匹配原则
- 验证密码长度
- 表单验证
- 正则提取
- 正则替换
- vue
- 插值操作
- Mustache语法
- 过滤器
- 绑定相关知识
- 绑定对象
- 单向绑定
- 双向绑定
- 绑定属性
- 动态绑定style
- 绑定事件
- 补充
- 绑定语法
- 基础
- vue介绍
- MVVM
- 计算属性
- 指令
- v-cloak
- 显示和隐藏
- 循环
- 自定义指令
- 本地缓存
- localStorage
- sessionStorage
- 对象劫持
- 组件
- 局部组件
- 父子组件
- 全局组件
- 组件访问实例数据
- 父传子
- 子传父
- 兄弟传兄弟
- 插槽
- methods,computed,watch的区别
- Vue.observable()
- vue.config.js配置
- 修饰符
- .sync修饰符
- $attrs和$listeners
- Node.js
- 使用Node执行js代码的两种方式
- 交互模式
- 解释js文件
- http模板
- request对象的使用
- express框架
- 安装
- post
- 获取请求参数
- post返回页面
- 重定向到别的接口
- get
- 返回页面
- get获取请求参数
- 请求静态资源
- 热重启
- Ajax
- 请求方式
- get请求
- post请求
- jQuery中的ajax方法
- JQuery中的get请求
- jQuery中的post请求
- 微信小程序
- 认识
- 引入样式的方式
- 绑定数据
- 小程序组件
- scroll - view 可滚动视图区域
- 发起请求
- template模板
- rich-text
- web-view
- open-data
- checkbox组件
- label组件
- radio组件
- picker组件
- swiper组件
- Git
- 跨域
- 左侧固定,右侧自适应
- vuex
- 如何解决vuex页面刷新数据丢失问题
- 数据结构
- 树
- 问题累积
- Axios
- 前端路由