用原生实现点击删除点击的li
简单的实现方式
<!DOCTYPE html>
<html>
<head>
<title></title>
<meta charset="utf-8">
<style type="text/css">
#button{
display:inline-block;
}
ul{
list-style: none;
}
li{
background-color: red;
display:inline-block;
width:20px;
padding:10px;
margin-left:3px;
color:white;
}
</style>
<script type="text/javascript">
window.onload = function (){
var oBtn1=document.getElementById('leftin');
var oBtn2=document.getElementById('rightin');
var oBtn3=document.getElementById('leftout');
var oBtn4=document.getElementById('rightout');
var oLi= document.getElementsByTagName('li');
//console.log(oBtn1);
var number=[];
var value;
var i=0;
oBtn1.onclick=function(){
//console.log(document.getElementsByTagName('input')[0].value);
value=document.getElementsByTagName('input')[0].value;
if(!/^[0-9]*$/.test(value))
alert("请输入有效的数字");
else{
number.unshift(value);
//console.log(number);
show();
for (var i = 0; i < oLi.length; i++) {
console.log(oLi[i]);
oLi[i].onclick = function(e) {
oUl.removeChild(e.target);
}
};
value = '';
}
}
oBtn2.onclick=function(){
value=document.getElementsByTagName('input')[0].value;
if(!/^[0-9]*$/.test(value))
alert("请输入有效的数字");
else{
number.push(value);
show();
for (var i = 0; i < oLi.length; i++) {
console.log(oLi[i]);
oLi[i].onclick = function(e) {
oUl.removeChild(e.target);
}
};
value = '';
}
}
oBtn3.onclick=function(){
alert(number.shift(number[number.length-1]));
show();
}
oBtn4.onclick=function(){
alert(number.pop(number[0]));
show();
}
/*var i1='document.getElementById("'+i+'")';
console.log(i1);
i1.onclick=function(){
var tar=parseInt(i1.getAttribute("id"));
number.splice(tar,1);
show();
console.log(1);
return number;
}*/
var oUl = document.getElementsByTagName('ul')[0];
console.log(oLi.length);
//alert(oLi.length);
/*oLi.onclick = function() {
console.log(1);
}*/
//console.log(oLi[0]);
for (var i = 0; i < oLi.length; i++) {
console.log(oLi[i]);
oLi[i].onclick = function(e) {
oUl.removeChild(e.target);
}
};
function show(){
var content=" ";
for(i=0;i<number.length;i++){
content+="<li>"+number[i]+"</li>";
}
result.innerHTML=content;
}
};
</script>
</head>
<body>
<input id="input" type="text">
<div id="button">
<button id="leftin">左侧入</button>
<button id="rightin">右侧入</button>
<button id="leftout">左侧出</button>
<button id="rightout">右侧出</button>
</div>
<ul id="result">
</ul>
</body>
</html>
这种方法原理是用For循环来为li添加点击事件,然后点到它的时候去删除ul的子节点
for (var i = 0; i < oLi.length; i++) {
console.log(oLi[i]);
oLi[i].onclick = function(e) {
oUl.removeChild(e.target);
}
};
这里需要说明一点,为什么不用
oUl.removeChild(oLi[i]);
因为在点击oLi[i]的时候,找不到所以的li节点,而且在这里的我们耶不是想要找所有的li节点,而是想找当前的。
所以,这里可以用
oUl.removeChild(e.target);
或
oUl.removeChild(this);
在这里说一下target
target 事件属性可返回事件的目标节点(触发该事件的节点),如生成事件的元素、文档或窗口。
然后就是一种高级一点的方法
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>task18</title>
<style>
#button{
display:inline-block;
}
ul{
list-style: none;
}
li{
background-color: red;
display:inline-block;
width:20px;
padding:10px;
margin-left:3px;
color:white;
}
</style>
</head>
<body>
<input id="input" type="text">
<div id="button">
<button id="leftin">左侧入</button>
<button id="rightin">右侧入</button>
<button id="leftout">左侧出</button>
<button id="rightout">右侧出</button>
</div>
<ul id="result">
</ul>
<script>
var $=function(id){
return document.getElementById(id);
}
var number=[];
//给按钮的父元素添加事件委托,避免给每个按钮添加点击事件
$("button").addEventListener("click",function(e){
var target=e.target,
value=$("input").value;
switch(target.id){
case "leftin":{
if(!/^\d+$/.test(value))alert("请输入有效的数字");
else{
number.unshift(value);
show();
}
break;
}
case "rightin":{
if(!/^\d+$/.test(value)) alert("请输入有效的数字");
else{
number.push(value);
show();
}
break;
}
case "leftout":{
alert(number.shift(number[number.length-1]));
show();
break;
}
case "rightout":{
alert(number.pop(number[0]));
show();
break;
}
}
})
//给输出的结果添加事件委托,使点击的元素被删除
$("result").addEventListener("click",function(e){
var target=e.target;
if(target.nodeName!="LI") return;
var tar=parseInt(target.getAttribute("id")); //到被点击元素的id属性,之前id绑定的是该元素在数组中的序号
number.splice(tar,1); //删除数组number中的元素,1代表只删除一个元素
show();
return number;
})
//将得到的用户输入数据输出显示到id为result的列表中
function show(){
var content=" ";
for(var i=0;i<number.length;i++){
content+="<li id='"+i+"'>"+number[i]+"</li>";
}
result.innerHTML=content;
}
</script>
</body>
</html>
它的主要亮点是删除数组中的对应项来达到删除li的效果
$("result").addEventListener("click",function(e){
var target=e.target;
if(target.nodeName!="LI") return;
var tar=parseInt(target.getAttribute("id")); //到被点击元素的id属性,之前id绑定的是该元素在数组中的序号
number.splice(tar,1); //删除数组number中的元素,1代表只删除一个元素
show();
return number;
这个代码还有一个亮点就是用了case语句,从而只添加了一个监听事件。
写这个小dome给我的感受是,我在写代码的过程中多思考的是html中元素的问题。插入和删除我都会从删除文本节点的方面去考虑,对js的应用处于表层,而别人的代码,则是基于一些js自带的函数考虑,更符合一门编程语言。这是我以后需要学习的。
用原生实现点击删除点击的li的更多相关文章
- React 点击删除列表中对应项(React 获取DOM中自定义属性)
点击删除按钮,删除列表中对应项本来是React比较基础的应用,可是应用情况变得复杂了以后,我还真想了一会儿才搞定. 简化一下应用场景:点击新增按钮,增加一条输入框,点击输入框旁边的按钮,删除该输入框( ...
- 使用原生JS,实现鼠标点击爱心效果 !!!
使用原生JS,实现鼠标点击爱心效果 !!! 引言: 在很多时候我们都需要实现鼠标点击出现图案或者文字这样的效果,对于用户而言,这样的体验是很极致的.其实实现起来也很简单,下面一起来学习一下吧.文末附上 ...
- mui 列表项左右滑删除功能升级(仿微信左滑 点击删除后出现确认删除)
mui 列表项左右滑删除功能升级(仿微信左滑 点击删除后出现确认删除) 2018-06-19更新显示样式
- jquery对类的操作,添加,删除,点击添加,再点击删除
jquery对类的操作,添加(addClass),删除l类(remoceClass),点击添加,再点击删除(toggleClass)
- textarea与标签组合,点击标签填入标签内容,再次点击删除内容(vue)
需求:将textarea与span标签组合,点击标签自动填入标签文本内容,再次点击删除标签文本对应内容 原理:点击标签时,将标签内容作为参数,将内容拼接在textarea的value后面,再次点击标签 ...
- 原生js添加和删除类
原生js添加和删除类: this.className +=" "; this.className = this.className.replace(" 原来的类" ...
- android selector 背景选择器的使用, button (未点击,点击,选中保持状态)效果实现
android selector 背景选择器的使用, button (未点击,点击,选中保持状态)效果实现 首先看到selector的属性: android:state_focus ...
- (79)【按键】[独立按键] - 1: 单击,双击,三击以及N击
此按键程序的实现的功能是单个独立按键的[单击],[长按],[双击],[三击]以及[多击].本文分为三个部分, 第一个部分是说[单击],[长按]的程序: 第二部分是讲[双击]: 第三部分是讲[三击],[ ...
- ASP.NET - Repeater控件删除按钮,点击删除信息
前台代码: <!--类别信息--> <div id ="newnews" class ="Frm"> <h4>类别管理< ...
随机推荐
- AutoMapper在asp.netcore中的使用
# AutoMapper在asp.netcore中的使用 automapper 是.net 项目中针对模型之间转换映射的一个很好用的工具,不仅提高了开发的效率还使代码更加简洁,当然也是开源的,htt ...
- CORS(跨站资源共享)介绍
起因 有同学在nginx站点配置中加了一行Access-Control-Allow-Origin *,导致微信中业务数据异常,抓包看http头有两个Access-Control-Allow-Origi ...
- Makefile中的变量和shell变量
我们在写makefile时 多多少少会用到shell脚本, 对于变量的在shell中的使用有一些要注意的细节.让我们从一个简单的makefile来看看. 注意makefile中一定要有一个目标,且一定 ...
- 【java系列】java开发环境搭建
描述 本篇文章主要讲解基于windows 10系统搭建java开发环境,主要内容包括如下: (1)安装资料准备 (2)安装过程讲解 (3)测试是否安装成功 (4)Hello Word测试 1 安装 ...
- codeforces 895A Pizza Separation 枚举
codeforces 895A Pizza Separation 题目大意: 分成两大部分,使得这两部分的差值最小(注意是圆形,首尾相连) 思路: 分割出来的部分是连续的,开二倍枚举. 注意不要看成0 ...
- 蓝桥杯 剪邮票 全排列+DFS
剪邮票 如[图1.jpg], 有12张连在一起的12生肖的邮票. 现在你要从中剪下5张来,要求必须是连着的. (仅仅连接一个角不算相连) 比如,[图2.jpg],[图3.jpg]中,粉红色所示部分就是 ...
- mysql复习秘籍
mysql复习 一:复习前的准备 1:确认你已安装wamp 2:确认你已安装ecshop,并且ecshop的数据库名为shop 二 基础知识: 1.数据库的连接 mysql -u -p -h -u 用 ...
- google开源服务器apprtc的搭建
本文参考网帖: http://www.jianshu.com/p/c55ecf5a3fcf http://io.diveinedu.com/2015/02/05/%E7%AC%AC%E5%85%AD% ...
- Java解决Hanoi问题
package fa.ct; import java.util.Scanner; public class Hanoi { public static void hanoi(int num,char ...
- Vue深度学习(2)
Text 可以在表单的input 元素上使用v-model 指令来创建双向数据绑定.它会根据input元素的类型自动选取正确的绑定模式. <div id="app"> ...