JavaScript实例 ODO List分析


Posted in Javascript onJanuary 22, 2022

一、实例代码

HTML

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
  <style>

  </style>
</head>

<body>
  <div id="myDIV" class="header">
    <h2 style="margin:5px">My To Do List</h2>
    <input type="text" id="myInput" placeholder="Title...">
    <span onclick="newElement()" class="addBtn">Add</span>
  </div>
  
  <ul id="myUL">
    <li>Hit the gym</li>
    <li class="checked">Pay bills</li>
    <li>Meet George</li>
    <li>Buy eggs</li>
    <li>Read a book</li>
    <li>Organize office</li>
  </ul>
  <script>

  </script>
</body>
</html>

CSS

body {
  margin: 0;/*清除默认外边距*/
  min-width: 250px;/*设置一个最小宽度*/
}

* {
  box-sizing: border-box;/*采用怪异盒模型*/
}


ul {/*清除默认内外边距*/
  margin: 0;
  padding: 0;
}


ul li {
  
  cursor: pointer;/*鼠标移上时变成手*/
  position: relative;/*相对于父级元素进行定位*/
  padding: 12px 8px 12px 40px;/*内边距*/
  background: #eee;/*背景颜色*/
  font-size: 18px;/*文字大小*/
  transition: 0.2s;
  
  /*下面四个是一个意思,使元素及子元素的文本不可选中*/
  -webkit-user-select: none;
  -moz-user-select: none;
  -ms-user-select: none;
  user-select: none;
}


ul li:nth-child(odd) {/*odd是奇数,这里是为了把奇偶项的背景颜色不同*/
  background: #f9f9f9;
}


ul li:hover {/*鼠标移上的项变色*/
  background: #ddd;
}


ul li.checked {/*已经做完的项*/
  background: #888;/*背景颜色*/
  color: #fff;/*文本颜色*/
  text-decoration: line-through;/*删除线*/
}


ul li.checked::before {/*伪元素*/
  content: '';/*不写内容伪元素无法生效*/
  position: absolute;/*绝对定位,定位依据是li*/
  border-color: #fff;/*边框颜色*/
  border-style: solid;/*边框风格*/
  border-width: 0 2px 2px 0;/*边框宽度*/
  top: 10px;/*顶部*/
  left: 16px;/*左边*/
  transform: rotate(45deg);/*旋转,形成√*/
  height: 15px;/*高度*/
  width: 7px;/*宽度*/
}

.close {
  position: absolute;/*绝对定位*/
  /*移动到最*/
  right: 0;
  top: 0;
  padding: 12px 16px 12px 16px;/*内边距*/
}

.close:hover {/*鼠标移上去的时候*/
  background-color: #f44336;/*背景颜色*/
  color: white;/*对勾的颜色*/
}


.header {/*定义标题样式*/
  background-color: #f44336;/*背景颜色*/
  padding: 30px 40px;/*内边距*/
  color: white;/*文字颜色*/
  text-align: center;/*文字水平居中*/
}


.header:after {
  content: "";
  display: table;
  clear: both;
}


input {
  border: none;/*清除默认边框样式*/
  width: 75%;/*宽度为父级的75%*/
  padding: 10px;/*内边距*/
  float: left;/*左浮动*/
  font-size: 16px;/*字体大小*/
}


.addBtn {/*定义添加按钮样式*/
  padding: 9px;
  width: 25%;
  background: #d9d9d9;
  color: #555;
  float: left;
  text-align: center;
  font-size: 16px;
  cursor: pointer;/*鼠标变成手*/
  transition: 0.3s;
}


.addBtn:hover {
  background-color: #bbb;/*鼠标移上时*/
} 

JavaScript

// Create a "close" button and append it to each list item
var myNodelist = document.getElementsByTagName("LI");
var i;
for (i = 0; i < myNodelist.length; i++) {
  var span = document.createElement("SPAN");
  var txt = document.createTextNode("\u00D7");
  span.className = "close";
  span.appendChild(txt);
  myNodelist[i].appendChild(span);
}

// Click on a close button to hide the current list item
var close = document.getElementsByClassName("close");
var i;
for (i = 0; i < close.length; i++) {
  close[i].onclick = function() {
    var div = this.parentElement;
    div.style.display = "none";
  }
}

// Add a "checked" symbol when clicking on a list item
var list = document.querySelector('ul');
list.addEventListener('click', function(ev) {
  if (ev.target.tagName === 'LI') {
    ev.target.classList.toggle('checked');
  }
}, false);

// Create a new list item when clicking on the "Add" button
function newElement() {
  var li = document.createElement("li");
  var inputValue = document.getElementById("myInput").value;
  var t = document.createTextNode(inputValue);
  li.appendChild(t);
  if (inputValue === '') {
    alert("You must write something!");
  } else {
    document.getElementById("myUL").appendChild(li);
  }
  document.getElementById("myInput").value = "";

  var span = document.createElement("SPAN");
  var txt = document.createTextNode("\u00D7");
  span.className = "close";
  span.appendChild(txt);
  li.appendChild(span);

  for (i = 0; i < close.length; i++) {
    close[i].onclick = function() {
      var div = this.parentElement;
      div.style.display = "none";
    }
  }
}

二、实例演示

页面加载后显示TODO List的页面

JavaScript实例 ODO List分析

点击可以把列表的某一项会自动用删除线标识,表示事情已经做完了

JavaScript实例 ODO List分析

点击每一项的最右边有删除事项的“叉叉”,点击可以删除事项

JavaScript实例 ODO List分析

最后在最上方的输入框输入事项的内容,然后点击右侧的Add按钮,可以把事项内容增加到下方列表中

JavaScript实例 ODO List分析

点击Add按钮后

JavaScript实例 ODO List分析

事项添加成功

三、实例剖析

var myNodelist = document.getElementsByTagName("LI");
var i;
for (i = 0; i < myNodelist.length; i++) {
  var span = document.createElement("SPAN");
  var txt = document.createTextNode("\u00D7");
  span.className = "close";
  span.appendChild(txt);
  myNodelist[i].appendChild(span);
}

这一部分是加载页面之后,在列表每一个事项的最后生成一个’×’的图标,用于提示用户可以点击删除

要注意: ’\u00D7’是Unicode编码,代表的就是’x’这个符号

var close = document.getElementsByClassName("close");
var i;
for (i = 0; i < close.length; i++) {
  close[i].onclick = function() {
    var div = this.parentElement;
    div.style.display = "none";
  }
}

这部分先获取类名为close的dom元素,同时也是’x’那个元素,获取到元素集合后,做一个循环,给每一个元素的onclick属性绑定函数

close[i].onclick = function() {
    var div = this.parentElement;
    div.style.display = "none";
}

如果有点击动作,则直接通过修改display来使事项隐藏,在用户看来就是直接将事项删除了

var list = document.querySelector('ul');
list.addEventListener('click', function(ev) {
  if (ev.target.tagName === 'LI') {
    ev.target.classList.toggle('checked');
  }
}, false);

这一部分是实现当用户点击某个事项时,给相应的被点击的事项添加’checked’类名来改变相应的样式

function newElement() {
  var li = document.createElement("li");
  var inputValue = document.getElementById("myInput").value;
  var t = document.createTextNode(inputValue);
  li.appendChild(t);
  if (inputValue === '') {
    alert("You must write something!");
  } else {
    document.getElementById("myUL").appendChild(li);
  }
  document.getElementById("myInput").value = "";
}

最后这一部分是添加新的事项,首先Add按钮的onclick属性绑定newElement()函数,点击Add之后执行newElement函数,生成新的li标签,并且把输入框内的内容也作为li标签的文本,生成之后添加到列表最下面

var span = document.createElement("SPAN");
  var txt = document.createTextNode("\u00D7");
  span.className = "close";
  span.appendChild(txt);
  li.appendChild(span);

  for (i = 0; i < close.length; i++) {
    close[i].onclick = function() {
      var div = this.parentElement;
      div.style.display = "none";
    }
  }

创建新的li标签后,需要配套的给新的li标签的最后面也添加一个’x’符号,并且给onclick属性绑定上函数

到此这篇关于JavaScript实例 ODO List分析的文章就介绍到这了,更多相关 ODO List分析内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章希望大家以后多多支持三水点靠木!

Javascript 相关文章推荐
ASP.NET jQuery 实例17 通过使用jQuery validation插件校验ListBox
Feb 03 Javascript
onclick与listeners的执行先后问题详细解剖
Jan 07 Javascript
使用纯javascript实现经典扫雷游戏
Apr 23 Javascript
javascript中Date()函数在各浏览器中的显示效果
Jun 18 Javascript
纯css实现窗户玻璃雨滴逼真效果
Aug 23 Javascript
Flow之一个新的Javascript静态类型检查器
Dec 21 Javascript
jQuery Easyui Datagrid实现单行的上移下移及保存移动的结果
Aug 15 Javascript
详解Web使用webpack构建前端项目
Sep 23 Javascript
使用vue-cli+webpack搭建vue开发环境的方法
Dec 22 Javascript
关于vue.js中实现方法内某些代码延时执行
Nov 14 Javascript
原生js实现无缝轮播图
Jan 11 Javascript
Vue中插槽slot的使用方法与应用场景详析
Jun 08 Vue.js
JavaScript ES6的函数拓展
Jan 18 #Javascript
Vue提供的三种调试方式你知道吗
Jan 18 #Vue.js
详解Vue项目的打包方式(生成dist文件)
Jan 18 #Vue.js
html5调用摄像头截图功能
Jan 18 #Javascript
在 HTML 页面中使用 React的场景分析
Jan 18 #Javascript
Element-ui Layout布局(Row和Col组件)的实现
Dec 06 #Vue.js
浅谈JavaScript作用域
Dec 06 #Javascript
You might like
thinkPHP学习笔记之安装配置篇
2015/03/05 PHP
微信公众号实现扫码获取微信用户信息(网页授权)
2019/04/09 PHP
在标题栏显示新消息提示,很多公司项目中用到这个方法
2011/11/04 Javascript
20款效果非常棒的 jQuery 插件小结分享
2011/11/18 Javascript
jquery 选取方法都有哪些
2014/05/18 Javascript
JavaScript的ExtJS框架中数面板TreePanel的使用实例解析
2016/05/21 Javascript
js运动事件函数详解
2016/10/21 Javascript
用jQuery的AJax实现异步访问、异步加载
2016/11/02 Javascript
vuejs通过filterBy、orderBy实现搜索筛选、降序排序数据
2020/10/26 Javascript
完美解决input[type=number]无法显示非数字字符的问题
2017/02/28 Javascript
vue 实现的树形菜的实例代码
2018/03/19 Javascript
angularjs通过过滤器返回超链接的方法
2018/10/26 Javascript
微信小程序五子棋游戏的悔棋实现方法【附demo源码下载】
2019/02/20 Javascript
Python写的创建文件夹自定义函数mkdir()
2014/08/25 Python
python 简单的多线程链接实现代码
2016/08/28 Python
Python去除、替换字符串空格的处理方法
2018/04/01 Python
Python实现的凯撒密码算法示例
2018/04/12 Python
Pycharm 操作Django Model的简单运用方法
2018/05/23 Python
基于python神经卷积网络的人脸识别
2018/05/24 Python
使用python实现飞机大战游戏
2020/03/23 Python
解决python中显示图片的plt.imshow plt.show()内存泄漏问题
2020/04/24 Python
HTML5自定义属性的问题分析
2019/08/16 HTML / CSS
Bailey帽子官方商店:Bailey Hats
2018/09/25 全球购物
Bluebella法国官网:英国性感内衣品牌
2019/05/03 全球购物
HOTEL INFO英国:搜索全球酒店
2019/08/08 全球购物
戴森香港官方网站:Dyson香港
2021/02/11 全球购物
抽象类和接口的区别
2012/09/19 面试题
如何定义一个可复用的服务
2014/09/30 面试题
2013年高中生自我评价
2013/10/23 职场文书
铁路个人事迹材料
2014/01/30 职场文书
党的群众路线教育实践活动调研报告
2014/11/03 职场文书
幼师求职自荐信
2015/03/26 职场文书
2015年行政人事工作总结
2015/05/21 职场文书
小学三年级班主任工作经验交流材料
2015/11/02 职场文书
mysql分表之后如何平滑上线详解
2021/11/01 MySQL
SQL Server查询某个字段在哪些表中存在
2022/03/03 SQL Server