todos+增删改查+js练习
增删改查+js练习+es6字符串模板@haloBabyBear
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>todos</title>
<style>
*{
margin:0;
padding:0;
} #content{
position:absolute;
top:50%;
left:50%;
transform:translate(-200px,-200px);
} #input{
width:395px;
height: 30px;
margin-bottom:10px;
}
#infoBox{
width:400px;
height:300px;
border:1px solid #000;
}
ul{
list-style-type: none;
}
.hide{
display: none;
}
</style>
</head>
<body>
<div id="content">
<input type="text" id="input"/>
<ul id="infoBox">
</ul>
</div>
<script src="todos.js"></script>
</body>
</html>
/**
*
*/
var data = [{"name":"item1","id":11},{"name":"item2","id":22}];
var input = document.getElementById("input");
var info =document.getElementById("infoBox");
//li对象
var lis = document.getElementsByTagName('li');
var txtName = document.getElementsByClassName("txtName");
var editInput = document.getElementsByClassName("editInput"); //初始化数据,及添加时调用
function init(data){
var fragment = document.createDocumentFragment(); data.forEach(function aa(item){
var li = document.createElement("li");
li.innerHTML = `<span class="txtName" data-id="${item.id}" data-name="${item.name}" ondblclick="edit(${item.id})">${item.name}</span>
<input class="editInput hide" type="text" value="${item.name}" onblur="editFinished(${item.id})"/>
<span data-id="${item.id}" style='float:right;cursor: pointer' onclick='remove(${item.id})'>X</span>`;
// li.setAttribute("data-id",item.id);
li.style ="margin-top:10px";
fragment.appendChild(li);
}); info.appendChild(fragment);
}
//页面加载好加载数据
window.onload = init(data); function remove(id){
for(var i=0;i<lis.length;i++){
if(lis[i] != null){
//删除元素 元素.parentNode.removeChild(元素);
if (lis[i].childNodes[4].dataset.id == id +"")
lis[i].parentNode.removeChild( lis[i]);
}
}
} function add(){
var idNum = Math.floor(100*Math.random());
//设置新的数组,数组长度一直为1
var newElement = [];//清空
newElement.push({"name":input.value,id:idNum});
data.push({"name":input.value,id:idNum});//infoBox中渲染的数据中添加新数据
init(newElement);//添加新数据
console.log(data);
return data;//返回所有数据
} //编辑
function edit(id){
for(var i=0;i<txtName.length;i++){
if(txtName[i].dataset.id == id + ""){
txtName[i].className = "txtName hide";
editInput[i].className = "editInput";
} }
} //编辑成功
function editFinished(id){
for(var i=0;i<txtName.length;i++){
if(txtName[i].dataset.id == id + ""){
var temp = txtName[i].dataset.name;
if (editInput[i].value === ''){
txtName[i].className = "txtName";
editInput[i].className = "editInput hide";
txtName[i].innerHTML = temp;
alert("为空时不改变");
}
else{
txtName[i].className = "txtName";
editInput[i].className = "editInput hide";
txtName[i].innerHTML = editInput[i].value;
alert("编辑成功");
}
}
}
} input.addEventListener('keydown', function(ev) {
//按键为回车键时执行
if (ev.keyCode === 13) {
//输入为空时不执行添加操作
if (input.value === '') return;
//添加数据
add();
//清空数据
input.value = '';
}
else {
//延时搜索
setTimeout(function() {
search(input.value);
}, 10)
}
}); function search($str){
for(var i=0;i<txtName.length;i++){
//ig全局匹配,不区分大小写
var reg = new RegExp("(" + $str + ")", "ig");
var temp = txtName[i].dataset.name;
//$1指原始字符串
//高亮要查找的字符串
temp = temp.replace(reg,"<span style='color:red'>$1</span>");
txtName[i].innerHTML = temp;
}
}



todos+增删改查+js练习的更多相关文章
- 增删改查js
-----------------------------------------------------一---------------------------------------------- ...
- JS组件系列——BootstrapTable+KnockoutJS实现增删改查解决方案(四):自定义T4模板快速生成页面
前言:上篇介绍了下ko增删改查的封装,确实节省了大量的js代码.博主是一个喜欢偷懒的人,总觉得这些基础的增删改查效果能不能通过一个什么工具直接生成页面效果,啥代码都不用写了,那该多爽.于是研究了下T4 ...
- easyui datagrid 增删改查示例
查询JSP页面 <!doctype html> <%@include file="/internet/common.jsp"%> <!-- 新样式右侧 ...
- BootstrapTable+KnockoutJS实现增删改查解决方案
BootstrapTable+KnockoutJS实现增删改查解决方案 前言:上篇介绍了下ko增删改查的封装,确实节省了大量的js代码.博主是一个喜欢偷懒的人,总觉得这些基础的增删改查效果能不能通过一 ...
- Node.js + MySQL 实现数据的增删改查
通过完成一个 todo 应用展示 Node.js + MySQL 增删改查的功能.这里后台使用 Koa 及其相应的一些中间件作为 server 提供服务. 初始化项目 $ mkdir node-cru ...
- JS组件系列——又一款MVVM组件:Vue(一:30分钟搞定前端增删改查)
前言:关于Vue框架,好几个月之前就听说过,了解一项新技术之后,总是处于观望状态,一直在犹豫要不要系统学习下.正好最近有点空,就去官网了解了下,看上去还不错的一个组件,就抽空研究了下.最近园子里vue ...
- JS组件系列——BootstrapTable+KnockoutJS实现增删改查解决方案(一)
前言:出于某种原因,需要学习下Knockout.js,这个组件很早前听说过,但一直没尝试使用,这两天学习了下,觉得它真心不错,双向绑定的机制简直太爽了.今天打算结合bootstrapTable和Kno ...
- JS组件系列——BootstrapTable+KnockoutJS实现增删改查解决方案(三):两个Viewmodel搞定增删改查
前言:之前博主分享过knockoutJS和BootstrapTable的一些基础用法,都是写基础应用,根本谈不上封装,仅仅是避免了html控件的取值和赋值,远远没有将MVVM的精妙展现出来.最近项目打 ...
- Node.js、express、mongodb 入门(基于easyui datagrid增删改查)
前言 从在本机(win8.1)环境安装相关环境到做完这个demo大概不到两周时间,刚开始只是在本机安装环境并没有敲个Demo,从周末开始断断续续的想写一个,按照惯性思维就写一个增删改查吧,一方面是体验 ...
随机推荐
- linux 迁移项目ProtocolException
背景:服务器跟换机房,虚拟机完整迁移项目,只修改ip和主机名 1.检查/etc/hosts 中ip 和主机名映射 2.检查网络端口是否有限制以及端口开放是否全了,检查ip有没有配对.RMI注册不上.
- 对弈的C++学习笔记
2018-07-11上传 一:从C到C++ 1.C++新类型 bool 判断真假 占用一个字节 if(条件) 真1或者假 0 bool 类型的取值 true false ...
- mybatis(2)--配置mybatis实现连接数据库查询
1.新建项目 2.在src下创建一个xml文件 比如这xml文件名为 mybatis.xml 一下为初始xml文件代码 <?xml version="1.0" encodin ...
- 丰富的else语句以及简介的with语句
1.if···else略 2.while.for与else Python中的循环语句(无论是while 还是for)中,经常配合continue和break语句,此时,可以和else搭配使用,当循环正 ...
- 万维网(WWW)
简介:万维网(WWW)是 Internet上最为普及的一种应用服务,它是由成千上万万维网站点(简称网站)组成的一个联机信息存储系统. 万维网的工作模式采用客户机/服务器方式,在用户计算机上运行浏览器作 ...
- makefile笔记2 - makefile总述
一.makefile的组成 Makefile 里主要包含了五个东西:显示规则.隐晦规则.变量定义.文件指示和注释. 1. 显示规则.显示规则说明了,如何生成一个或多的的目标文件.这是由 Makefil ...
- html 使表格随着内容自动适应宽度
所谓难而不会,会儿不难.这个问题让我纠结了很长时间,一句css解决了,仅仅靠一个属性 td { white-space: nowrap; } from:http://blog.csdn.net/liu ...
- Linux虚拟机部署单机solr报错500解决方法之一
HTTP Status 500 - {msg=SolrCore 'collection1' is not available due to init failure: Could not load c ...
- 2018—自学Selenium+Python 笔记(一)
在开始学习前,先唠几句: 身为一个开发人员,为何想要转测试..很多人不解. 但我觉得这并没有什么不可,测试人员是质量的把控者: 要出一个让客户满意的产品,单纯靠开发自测,是不够的..相信其中缘由大家都 ...
- 配置VLAN
SW1 Switch>en Switch#conf t Enter configuration commands, one per line. End with CNTL/Z. Switch(c ...