Author:Mr.柳上原
能把爱好和工作结合起来
是一件幸福的事情
经过这么多年的挫折
还好现在找到了
前端
我很爱你!
工作
我很爱你!
<meta charset="utf-8">
<!DOCTYPE html> <!-- 文档类型:标准html文档 -->
<html lang='en'> <!-- html根标签 翻译文字:英文 -->
<head> <!-- 网页头部 -->
<meat charset='UTF-8'/> <!-- 网页字符编码 -->
<meat name='Keywords' content='关键词1,关键词2'/>
<meat name='Description' content='网站说明'/>
<meat name='Author' content='作者'/>
<title>前端59期学员作业</title> <!-- 网页标题 -->
<link rel='stylesheet' type='text/css' href='css/css1.css'/> <!-- 外链样式表 -->
<style type='text/css'> /*内部样式表*/
</style>
</head>
<body> <!-- 网页主干:可视化区域 -->
<script>
/*
本地存储:
localStorage 永久存储
sessionStorage 浏览器关闭时清空
*/
// localStorage
// 设置localStorage的值
localStorage.setItem("fengyu", "dashuaibi"); // 参数为key,value,参数只能传字符串形式
// 本地存储查找
Application -> Storage
// 本地存储实例
// 电子记事本
.done{} // 数据的css样式
// 设计可遍历的数据结构
[
{
content: "", // 内容
done: false // 状态
}
]
const ipt = document.getElementById("ipt"); // 输入表单
const list = document.getElementById("list"); // 输出备忘栏(<ul>)
const data = localStorage.getItem("todolist"); // 查询本地存储
// 判断是否有值
if (data === null){ // 没有写入数据时
localStorage.setItem("todolist", "[]"); // 设置本地存储的参数
} else { // 有数据时
JSON.parse(data).forEach((v, i, self) => {
list.innerHTML += `<li class=${v.done ? "done" : ""}>${v.content}<span>X</span></li>`
})
}
// 回车添加内容
ipt.onkeydown = function (e){
// 判断键盘的键值
if (e.keyCode !== 13) return;
// 回车后获取输入的值
const val = this.value.trim();
// 判断输入的内容
if (!val) return;
// 添加数据
const data = JSON.parse(localStorage.getItem("todolist")); // 防止数据覆盖,先取出之前的数据,然后再加上现有写入的数据
list.inneHTML += `<li>${val}<span>X</span></li>`
// 更新本地存储
data.push({
content,
done: false
});
// 写入本地存储
localStorage.setItem("todolist", JSON.stringify(data));
// 清空输入框
this.value = "";
}
// 删除数据事件
list.addEventListener("click", e => {
const that = e.target;
const data = localStorage.getItem("todolist");
e.stopPropagation();
const tagName = that.tagName.toLowerCase();
switch (tagName){
case "span":
data.forEach(function(v, i, self){
if (this === list.children[i]){
list.removeChild(this);
self.splie(i, 1);
}
}, that.parentNode); // forEach回调函数的this指向
break;
case "li":
data.forEach(function(v, i, self){
if (that === list.children[i]){
v.done = !v.done;
that.classlist.toggle("done");
}
})
break;
// 没有default
}
localStorage.setItem("todolist", JSON.stringify(data));
});
/*
jsonp:
json的一种使用模式
跨域获取数据的方式
script的src属性具有跨域请求资源的能力
scr与json配合的模式就是就是jsonp
*/
// src默认get请求
// src里网站的查询字段里输出cb的值
// 后端拿到cb值,返回相应的值名与数据
src="[http://www.xxx.com?username=fengyu&cb=fy](http://www.baidu.com?username=fengyu&cb=fy)"
cb=fy
const cb = ctx.query.cb; // nodejs后端查询命名
ctx.type = "text/javascript";
ctx.body = `${cb}({a: "这是后端朋友传过来的数据"})`;
fy({
JSON: "后端返回的数据"
}) // 格式
// 前端定义一个fy函数,就能取到后端发来的值
function fy(obj){
console.log(obj); // obj = {a: "这是后端朋友传过来的数据"};
}
// 如果当前端需要触发某些方法时再拿到数据
document.onclick = function (){ // 点击事件触发时创建script标签进行跨域操作
const script = document.createElement("script");
script.src = "[http://www.xxx.com?username=fengyu&cb=fy](http://www.baidu.com?username=fengyu&cb=fy)";
document.body.appendChild(script);
}
</script>
// script的src属性
<script src="[http://www.xxx.com?username=fengyu&cb=fy](http://www.baidu.com?username=fengyu&cb=fy)"></script>
</body>
</html>