1.单选框/手风琴
1
2.复选框
1 function checkListTwo(){ //点击变换效果 2 var li = document.getElementById("checkList").getElementsByTagName("li"); 3 for(var i=0;i
3.多级导航菜单
1
4.获取时间,把获取到的毫秒数转换成我们需要的时间格式即可
1 function getFormatTime(time) { 2 var time = time 0; 3 4 var h = parseInt(time/3600), 5 m = parseInt(time%3600/60), 6 s = parseInt(time%60); 7 h = h < 10 ? "0"+h : h; 8 m = m < 10 ? "0"+m : m; 9 s = s < 10 ? "0"+s : s; 10 11 return h+":"+m+":"+s; 12 }
5.小时钟显示
1 2 3 4 5 6Date 7 8 9 38 39 40
6.小写转大写
1 2 3 4 11 12 13 14 15 Enter your name: 16 17 18
7.禁止用户输入数字
1 2 3 4 512 13 33 34Document 6 7 8
8.Web SQL浏览器端数据库
Web SQL 状态信息
9.一个增删demo
1 DOCTYPE html> 2 <html lang="en"> 3 <head> 4 <meta charset="UTF-8"> 5 <title>一个增删demotitle> 6 head> 7 <body> 8 <input type="text" id="text"> 9 <input type="button" value="添加" id="button"> 10 <ul> 11 <li>第1个<button class="btn" id="1">删除button>li> 12 <li>第2个<button class="btn" id="2">删除button>li> 13 <li>第3个<button class="btn" id="3">删除button>li> 14 ul> 15 <script> 16 var button = document.getElementById("button"); 17 var text = document.getElementById("text"); 18 var ul = document.getElementsByTagName("ul")[0]; 19 var btnClass = document.getElementsByClassName("btn"); 20 button.onclick = function(){ 21 var deleteButton = document.createElement("button"); 22 var value = text.value; 23 deleteButton.setAttribute("class","btn"); 24 var deleteText = document.createTextNode("删除"); 25 deleteButton.appendChild(deleteText); 26 var li = document.createElement("li"); 27 var liText = document.createTextNode(value); 28 li.appendChild(liText); 29 li.appendChild(deleteButton); 30 ul.appendChild(li); 31 for(var i=0;i<btnClass.length;i++){ 32 btnClass[i].onclick=function(){ 33 this.parentNode.parentNode.removeChild(this.parentNode); 34 } 35 } 36 } 37 38 for(var i=0;i<btnClass.length;i++){ 39 btnClass[i].onclick=function(){ 40 this.parentNode.parentNode.removeChild(this.parentNode); 41 } 42 } 43 script> 44 body> 45 html>
10.Generator抽奖逻辑
1
11.检测数据类型
//写出一个比typeof运算符更准确的类型判断函数。 var type = function (o){ var s = Object.prototype.toString.call(o); return s.match(/\[object (.*?)\]/)[1].toLowerCase(); }; type({}); // "object" type([]); // "array" type(5); // "number" type(null); // "null" type(); // "undefined" type(/abcd/); // "regex" type(new Date()); // "date"
function checkedType(target){ return Object.prototype.toString.call(target).slice(8,-1); }
12.数组去重——Array.filter()
let arr=[2,3,4,2,3]; console.log(arr.filter(function(item,index,self){ return self.indexOf(item)==index} ) )
注:性能差
13.数组/字符串去重——利用for循环去重
/*var arr1 ="abcdabcd";*/ var arr1=['a','b','c','a','d','b'] var arr2=[]; for(var i=0;i){ if(arr2.indexOf(arr1[i])<0){ arr2.push(arr1[i]); } } document.write(arr2);
注:性能良好
13.1数组去重——ES6(Set)
let arr=[1,2,3,4,5,3,5,6,2]; let a=new Set(arr); let b=[...a]; console.log(b);//[1,2,3,4,5,6]
注:性能优
13.2数组去重——创建空对象
1 let arr=[1,2,3,4,5,3,5,6,2]; 2 let b=[]; 3 let c={}; 4 for(let i=0;i){ 5 if(!c[arr[i]]){ 6 b.push(arr[i]); 7 c[arr[i]]='hello'; // 8 } 9 } 10 console.log(b);//[ 1, 2, 3, 4, 5, 6 ] 11 console.log(c); 12 /*{1: "hello", 2: "hello", 3: "hello", 4: "hello", 5: "hello", 6: "hello"}*/
注:性能最优
13.3数组去重——利用splice
function newArr(arr){ for(var i=0;i){ for(var j=i+1;j ) if(arr[i]==arr[j]){ //如果第一个等于第二个,splice方法删除第二个 arr.splice(j,1); j--; } } return arr; } var arr = [1,1,2,5,6,3,5,5,6,8,9,8]; console.log(newArr(arr))
注:性能最差
13.4数组去重——Array.sort()
function distinct(a, b) { let arr = a.concat(b) arr = arr.sort() let result = [arr[0]] for (let i=1, len=arr.length; i) { arr[i] !== arr[i-1] && result.push(arr[i]) } return result; } console.log(distinct([4,3,2],[5,4,2])) //[2,3,4,5]
13.5字符串去重——ES6(set)
[...new Set('ababbc')].join('') // "abc"
14.1判断数组是否存在重复值
var arr=['333','222','222','444','333']; var s=arr.join(",")+","; for(var i=0;i){ if(s.replace(arr[i]+",","").indexOf(arr[i]+",")>0) alert("数组中有重复元素:" + arr[i]); }
14.2判断数组是否存在重复值(2)
var ary = new Array("111","22","33","111"); var nary=ary.sort(); for(var i=0;i){ if (nary[i]==nary[i+1]){ alert("数组重复内容:"+nary[i]); } }
14.3判断数组是否存在重复值(3)
function isRepeat(arr){ var hash = []; for(var i in arr) { if(hash[arr[i]]) return true; hash[arr[i]] = true; } return false; } var arr=["111","22","33","111"]; alert(isRepeat(arr))
15.获取浏览URL中查询字符串的参数
1 function showWindowHref(arr){ 2 var sHref = arr; 3 var args = sHref.split('?'); 4 if(args[0] == sHref){ 5 return ""; 6 } 7 var arr = args[1].split('&'); 8 alert(arr) //staffid=12333,name=xiaoming,age=23 9 var obj = {}; 10 for(var i = 0;i< arr.length;i++){ 11 var arg = arr[i].split('='); 12 obj[arg[0]] = arg[1]; 13 console.log(obj[arg[0]]) //12333,xiaomi,23 14 } 15 return obj; 16 } 17 var href = showWindowHref("https://www.runoob.com/jsref/met-win-close.html?staffid=12333&name=xiaoming&age=23"); // obj 18 alert(href['name']); // xiaoming
16.原生Ajax
1 2 3 4 5原生的Ajax 6 7 8 9 37 38
1 100——客户必须继续发出请求 2 101——客户要求服务器根据请求转换HTTP协议版本 3 200——交易成功 4 201——提示知道新文件的URL 5 202——接受和处理、但处理未完成 6 203——返回信息不确定或不完整 7 204——请求收到,但返回信息为空 8 205——服务器完成了请求,用户代理必须复位当前已经浏览过的文件 9 206——服务器已经完成了部分用户的GET请求 10 300——请求的资源可在多处得到 11 301——删除请求数据 12 302——在其他地址发现了请求数据 13 303——建议客户访问其他URL或访问方式 14 304——客户端已经执行了GET,但文件未变化 15 305——请求的资源必须从服务器指定的地址得到 16 306——前一版本HTTP中使用的代码,现行版本中不再使用 17 307——申明请求的资源临时性删除 18 400——错误请求,如语法错误 19 401——请求授权失败 20 402——保留有效ChargeTo头响应 21 403——请求不允许 22 404——没有发现文件、查询或URl 23 405——用户在Request-Line字段定义的方法不允许 24 406——根据用户发送的Accept拖,请求资源不可访问 25 407——类似401,用户必须首先在代理服务器上得到授权 26 408——客户端没有在用户指定的时间内完成请求 27 409——对当前资源状态,请求不能完成 28 410——服务器上不再有此资源且无进一步的参考地址 29 411——服务器拒绝用户定义的Content-Length属性请求 30 412——一个或多个请求头字段在当前请求中错误 31 413——请求的资源大于服务器允许的大小 32 414——请求的资源URL长于服务器允许的长度 33 415——请求资源不支持请求项目格式 34 416——请求中包含Range请求头字段,在当前请求资源范围内没有range指示值,请求也不包含If-Range请求头字段 35 417——服务器不满足请求Expect头字段指定的期望值,如果是代理服务器,可能是下一级服务器不能满足请求 36 500——服务器产生内部错误 37 501——服务器不支持请求的函数 38 502——服务器暂时不可用,有时是为了防止发生系统过载 39 503——服务器过载或暂停维修 40 504——关口过载,服务器使用另一个关口或服务来响应用户,等待时间设定值较长 41 505——服务器不支持或拒绝支请求头中指定的HTTP版本
17.短横线转换为驼峰命名
1
18.vue实现简单购物车
vue综合练习 购物车
if="products.length==0">空空如也
else>
编号 商品名称 商品价格 商品数量 操作 for="(product,index) in products"> {{index+1}} {{product.name}} {{product.price}} {{product.num}} 总价:{{total}}
18.2.vue实现简单购物车2
Document
购物车
19.vue——卡片列表循环单击选中效果
<li v-for="(item,index) in filterAddress" v-bind:class="{'check': index == currentIndex}" @click="currentIndex=index"> /*filterAddress计算属性的方法值可以放在,充当数组*/ //@click="currentIndex=index"标明了将点击的索引值赋给currentIndex,index == currentIndex自身的索引和当前点击事件索引相同,则产生选中事件 /*当产生点击事件后,第一个currentIndex因为相等所以产生true,check类就可以渲染,v:bind和@click结合使用,会产生奇妙的状态!*/
注:与1的手风琴效果类似
20.深度拷贝
var deepCopy = function(obj) { if (typeof obj !== 'object') return; var newObj = obj instanceof Array ? [] : {}; for (var key in obj) { if (obj.hasOwnProperty(key)) { newObj[key] = typeof obj[key] === 'object' ? deepCopy(obj[key]) : obj[key]; } } return newObj; }
21.ES6——Primise-async语法实现红绿灯
实现一个红绿灯 实现一个红绿灯,把一个圆形 div 按照绿色 3 秒,黄色 1 秒,红色 2 秒循环改变背景色
Promise、async\await 语法实现
22.HTML5拖拽图片上传及本地预览
HTML5拖拽上传 HTML5拖拽上传及本地预览
将文件拖拽到此处开始上传!
23.使用js实现极简Vue.js双向数据绑定功能
实现极简Vue.js双向数据绑定 {{message}}
<--! HTML代码-->input1=>
input2=>
我每次比input1的值加1=><--! JS代码--> var oInput1 = document.getElementById('input1'); var oInput2 = document.getElementById('input2'); var oSpan = document.getElementById('span'); var obj = {}; Object.defineProperties(obj, { val1: { configurable: true, get: function() { oInput1.value = 0; oInput2.value = 0; oSpan.innerHTML = 0; return 0 }, set: function(newValue) { oInput2.value = newValue; oSpan.innerHTML = Number(newValue) ? Number(newValue) : 0 } }, val2: { configurable: true, get: function() { oInput1.value = 0; oInput2.value = 0; oSpan.innerHTML = 0; return 0 }, set: function(newValue) { oInput1.value = newValue; oSpan.innerHTML = Number(newValue)+1; } } }) oInput1.value = obj.val1; oInput1.addEventListener('keyup', function() { obj.val1 = oInput1.value; }, false) oInput2.addEventListener('keyup', function() { obj.val2 = oInput2.value; }, false)
24.左中右三栏布局,中间自适应,5种布局方法
DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>左中右三栏布局,中间自适应,5种布局方法title>
<style>
body{
margin: 0;
padding: 0;
}
/** FlexBox **/
.container{display: flex;}
.container div{min-height: 100px;}
.container .left,
.container .right{width: 300px; background-color: orange;}
.container .center{flex:1;background-color: #ccc;}
/** Float **/
.container2 div{min-height: 100px;}
.container2 .left,
.container2 .right{background-color: palegreen;width: 300px;}
.container2 .center{background-color: #ccc}
.container2 .left{float: left;}
.container2 .right{float: right;}
/** absolute **/
.container3{min-height: 100px;}
.container3 div{min-height: 100px;position: absolute;}
.container3 .left,
.container3 .right{background-color: palegreen;width: 300px;}
.container3 .center{background-color: #ccc;left: 300px;right: 300px;}
.container3 .left{left: 0;}
.container3 .right{right: 0;}
/** table **/
.container4{width: 100%;height: 100px;display: table;}
.container4 div{display: table-cell;}
.container4 .left,
.container4 .right{background-color: palegreen;width: 300px;}
.container4 .center{background-color: #ccc;}
/** CSS Grid **/
.container5{
width: 100%;
display: grid;
grid-template-rows: 100px;
grid-template-columns: 300px auto 300px;
}
.container5 div{min-height: 100px;}
.container5 .left,
.container5 .right{background-color: palegreen;}
.container5 .center{background-color: #ccc;}
/** 双飞翼(浮动) **/
.container6{
}
.container6 div{min-height: 100px;}
.container6 .left,
.container6 .right{background-color: palegreen;}
.container6 .center{background-color: #ccc;}
style>
head>
<body>
<h1>左中右三栏布局,中间自适应h1>
<h2>1. FlexBox方案h2>
<div class="container">
<div class="left">div>
<div class="center">
左中右三栏布局,中间自适应,FlexBox方案左中右三栏布局,中间自适应,FlexBox方案左中右三栏布局,
中间自适应,FlexBox方案左中右三栏布局,中间自适应,FlexBox方案左中右三栏布局,中间自适应,FlexBox方案
div>
<div class="right">div>
div>
<h2>2. Float方案h2>
<div class="container2">
<div class="left">div>
<div class="right">div>
<div class="center">
左中右三栏布局,中间自适应,Float方案左中右三栏布局,中间自适应,Float方案左中右三栏布局,中间自适应,
Float方案左中右三栏布局,中间自适应,Float方案左中右三栏布局,中间自适应,Float方案左中右三栏布局,中间自适应
div>
div>
<h2>3. 绝对定位方案h2>
<div class="container3">
<div class="left">div>
<div class="center">
左中右三栏布局,中间自适应,绝对定位方案左中右三栏布局,中间自适应,绝对定位方案左中右三栏布局,
中间自适应,绝对定位方案左中右三栏布局,中间自适应,绝对定位方案左中右三栏布局,中间自适应,绝对定位方案
div>
<div class="right">div>
div>
<h2>4. 格布局方案h2>
<div class="container4">
<div class="left">div>
<div class="center">
左中右三栏布局,中间自适应,表格布局方左中右三栏布局,中间自适应,表格布局方左中右三栏布局,中间自适应
左中右三栏布局,中间自适应,表格布局方左中右三栏布局,中间自适应,表格布局方左中右三栏布局,中间自适应,
div>
<div class="right">div>
div>
<h2>5. 网格布局方案h2>
<div class="container5">
<div class="left">div>
<div class="center">
左中右三栏布局,中间自适应,网格布局方案左中右三栏布局,中间自适应,网格布局方案左中右三栏布局,中间自适应,网格布局方案
左中右三栏布局,中间自适应,网格布局方案左中右三栏布局,中间自适应,网格布局方案左中右三栏布局,中间自适应,网格布局方案
div>
<div class="right">div>
div>
<h2>6. 双飞翼(浮动)布局方案h2>
<div class="container6">
<div class="main">
<div class="center">
双飞翼(浮动)布局方案双飞翼(浮动)布局方案双飞翼(浮动)布局方案双飞翼(浮动)布局方案双飞翼(浮动)布局方案
双飞翼(浮动)布局方案双飞翼(浮动)布局方案双飞翼(浮动)布局方案双飞翼(浮动)布局方案双飞翼(浮动)布局方案
div>
div>
<div class="left">div>
<div class="right">div>
div>
body>
html>
25.DIV模板引擎
DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>DIV模板引擎title>
head>
<body>
<h1>DIV模板引擎h1>
<script>
var Template = function (tempstr, data) {
var re = /<%([^%>]+)?%>/g,
cursor = 0, // 字符串的查找位置
reExp = /^\s*(for|if|else|switch|case|break|continue|{|})(.*)?/g,
code = 'var arr = [];\n';
var add = function (line, flag) { //flag --> 判断是否是JS代码
// 第一次:line ==> 我的名字是:
code += flag ? line.match(reExp) ? line : 'arr.push(' + line + ');\n'
: 'arr.push("' + line.replace(/"/, '\\"') + '");\n';
}
while (item = re.exec(tempstr)) {
add(tempstr.slice(cursor, item.index));
add(item[1], true);
cursor = item.index + item[0].length;
}
add(tempstr.substring(cursor));
code += 'return arr.join("");';
return new Function(code.replace(/[\r\n\t]/g, '')).apply(data);
}
// var str = '我的名字是:<%this.name%>,年龄是:<%this.profile.age%>,Over!!!';
// var res = Template(str, {
// name: 'Dunizb',
// profile: {
// age: 22
// }
// });
// console.log(res);
var str = '我的爱好:<%for(var i in this.hobby){%>'
+ '<%this.hobby[i]%>
'
+ '<%}%>';
var res = Template(str, {
hobby: ['php', 'java', 'javascript', 'linux', 'python']
});
document.write(res);
script>
body>
html>
26.省市两级级联下拉列表
DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>省市两级级联下拉列表title>
head>
<body>
<select id="province">
<option>==请选择省份==option>
select>
<select id="city">
<option>==请选择城市==option>
select>
body>
<script>
// 准备数据
var data = [
{"code" : "0001", "name" : "广东省",
"cities" : [
{"code" : "00010001", "name" : "广州市"},
{"code" : "00010002", "name" : "深圳市"},
{"code" : "00010003", "name" : "东莞市"}
]
},
{"code" : "0002", "name" : "湖南省",
"cities" : [
{"code" : "00020001", "name" : "长沙市"},
{"code" : "00020002", "name" : "衡阳市"},
{"code" : "00020003", "name" : "郴州市"}
]
},
{"code" : "0003", "name" : "江西省",
"cities" : [
{"code" : "00030001", "name" : "南昌市"},
{"code" : "00030002", "name" : "赣州市"},
{"code" : "00030003", "name" : "吉安市"}
]
}
];
window.onload = function(){
// 获取省份城市select
var proSelect = document.getElementById("province");
for (var i = 0; i < data.length; i++){
var json = data[i];
var option = new Option(json.name, json.code, false, false);
proSelect.add(option);
}
// 为proSelect绑定onChange事件
proSelect.onchange = function(){
var citySelect = document.getElementById("city");
// 在下次选择省份之前先清空城市下拉列表
for (var i = citySelect.length - 1; i > 0; i--){
citySelect.remove(i);
}
for (var i = 0; i < data.length; i++){
var json = data[i];
if (json.code == this.value){
// 取城市
var cities = json.cities;
for (var j = 0; j < cities.length; j++){
// 获取其中的json
var temp = cities[j];
var option = new Option(temp.name, temp.code, false, false);
citySelect.add(option);
}
}
}
}
}
script>
html>
27.CSS3——打字延迟动画
DOCTYPE html>
<html>
<head lang="en">
<meta charset="UTF-8">
<title>打字动画title>
<style>
body {background-color: #000;color:green;}
p {
width: 27em; /*这里控制打字的宽度和子长,也可以取消下面的JS注释 */
font-family: Menlo, Monaco, Consolas, "Courier New", monospace;
overflow: hidden;
white-space: nowrap;
border-right: .05em solid transparent;/*兼容处理*/
border-right: .05em solid;
animation: typing 6s steps(16),
caret 1s steps(1) infinite;
}
@keyframes typing {
from { width: 0; }
}
@keyframes caret {
50% { border-right-color: transparent; }
}
style>
head>
<body>
<p>Javascript是世界最好的语言,hello world,hello lucas!p>
<script>
/*** 此段JS代码的目的是为了动态设置文字的宽度和步长 ****/
// var ps = document.getElementsByTagName("p");
// for(var i=0 ;i
// var len = ps[i].textContent.length;
// ps[i].style.width = len + 'em';
// ps[i].style.animationTimingFunction = "steps("+len+"),steps(1)";
// }
script>
body>
html>
28.CSS3——文字闪烁动画
DOCTYPE html>
<html>
<head lang="en">
<meta charset="UTF-8">
<title>文字闪烁title>
<style>
.hightlight {
width: 500px;
margin: 100px auto;
font:700 20px/20px "Microsoft YaHei";
animation: 1s blink 3 steps(1) ;
}
@keyframes blink {
50% { color: transparent; }
}
style>
head>
<body>
<div class="hightlight">hello lucasdiv>
body>
html>
29.数组与字符串对象相同的方法
concat()
indexOf()
lastIndexOf()
includes()
toString()
slice()
30.找出数组最大个数
//es5写法 function maxNumber(){ var arr = [10,29,5] document.write(Math.max.apply(null,arr)) }
//es6拓展运算符... Math.max(...arr)
arr.sort((num1, num2) => { return num1 - num2 < 0 }) arr[0]
let max = arr[0]; for (let i = 0; i < arr.length - 1; i++) { max = max < arr[i+1] ? arr[i+1] : max }
31.JS简单数组排序
function sortNumber(a,b) { return a - b; //如果需要降序排序可以把a与b调换即可 } var arr = new Array(6) arr[0] = "10" arr[1] = "5" arr[2] = "40" arr[3] = "25" arr[4] = "1000" arr[5] = "1" document.write(arr + "
") document.write(arr.sort(sortNumber))
var arr = [1, 7, 10, 4, 6]; function compare(val1, val2) { if(val1 < val2) { return -1; } else if(val1 > val2) { return 1; } else { return 0; } }; arr.sort(compare); console.log(arr);
32.对数组进行随机排序
var points = [40, 100, 1, 5, 25, 10]; document.getElementById("demo").innerHTML = points; function myFunction() { points.sort(function(a, b){return 0.5 - Math.random()}); document.getElementById("demo").innerHTML = points; }
33.为不具备 Iterator 接口的对象提供遍历方法
function* objectEntries(obj) { const propKeys = Reflect.ownKeys(obj); for (const propKey of propKeys) { yield [propKey, obj[propKey]]; } } const jane = { first: 'Jane', last: 'Doe' }; for (const [key,value] of objectEntries(jane)) { console.log(`${key}: ${value}`); } // first: Jane // last: Doe //Reflect.ownKeys() 返回对象所有的属性,不管属性是否可枚举,包括 Symbol。
34.嵌套数组的平铺
function* iterTree(tree) { if (Array.isArray(tree)) { for(let i=0; i < tree.length; i++) { yield* iterTree(tree[i]); } } else { yield tree; } } const tree = [ 'a', ['b', 'c'], ['d', 'e'] ]; for(let x of iterTree(tree)) { console.log(x); } // a // b // c // d // e //由于扩展运算符...默认调用 Iterator 接口,所以上面这个函数也可以用于嵌套数组的平铺。 `[...iterTree(tree)] // ["a", "b", "c", "d", "e"]`
35.Markdown源码
1 2 3 4 5 6md转换为html 7 8 9 10 11Markdown转换为HTML的Demo12 209 243 251252261 262 263253
260254 259255 256 257 258
待续......