js获取鼠标点击的对象,点击另一个按钮删除该对象的实现代码


Posted in Javascript onMay 13, 2016

今天遇到一个很奇葩的需求,是这样的:当我点击文字的时候弹出一个删除按钮,可以删除刚才点击的文字.

诶?当时想了想,没什么难度吧.可是,既然是奇葩的需求怎么可能这么简单.

对,还有一个功能.我并不知道我点了哪个标签,英文可以承载文字的标签太多太多....

当时我tm就懵逼了.你都不知道要点哪个标签,我怎么去绑定事件?给谁绑定事件?  扯了半天,还是要写.于是就动工了.

我思路是这样的:

START

1,首先得获取鼠标点击的对象.(问题是...我怎么知道点了哪个)

那么先写个函数去获取鼠标点击的对象吧

js获取鼠标点击的对象,点击另一个按钮删除该对象的实现代码

 

get_tag这个函数被绑定在body的onclick事件上,然后接受了一个event参数;

然后event对象有个target属性,是可以直接获取鼠标点击的对象.

我们log看看

js获取鼠标点击的对象,点击另一个按钮删除该对象的实现代码

 

恩,可以的.和预先的思路一致.得到了想要的结果.

2, 得到对象.可是要怎么删除呢?

var del_tag = function(){
    var tag=null;
    return {
      get:function(e){
        tag = e;
      },
      del:function(){
        $(tag).remove();
      }
    }
  }

由于删除按钮和我们鼠标所点击的对象并没有什么联系.所以我们得写个闭包,声明一个tag去保存我们所点击的对象.

然后返回两个函数,一个get.用来获取鼠标上次点击的对象.一个是del.顾名思义,删除点击的对象.

由于是闭包,所以tag会被保存到内存中.正好实现所要的功能.

3. 二者结合

var del_tag = function(){
    var tag=null;
    return {
      get:function(e){
        tag = e;
      },
      del:function(){
        $(tag).remove();
      }
    }
  }

  var dt = del_tag();//把del_tag赋值给dt


  function get_tag(e){
    var ele = e.target;
    //调用dt.get() 参数就是get_tag函数event参数的值的target
    dt.get($(ele));
  }

  $('#del').click(function(){    
    //这里,由于创建了闭包.我们上次点击的对象被保存了起来.
    //所以这里可以直接调用dt.del() 删除对象
    dt.del();
  })

4.看看效果

js获取鼠标点击的对象,点击另一个按钮删除该对象的实现代码

 

js获取鼠标点击的对象,点击另一个按钮删除该对象的实现代码

5.效果还不错.可是..随便点击某个对象都可以删除.这是不是就乱套了?接着改

var del_tag = function(){
    var tag=null;
    return {
      get:function(e){
        tag = e;
      },
      del:function(){
        $(tag).remove();
      }
    }
  }

  var dt = del_tag();//把del_tag赋值给dt


  function get_tag(e){

    var ele = e.target;
    $(ele).css('border','1px solid red')
    var tagname = ele.tagName;
    //定义一个tag数组. 用来存储我们想删除的对象
    var tagarr = ['SPAN','H1','H2','H3','H4','H5','H6','P'];
    //判断如果我们点击的对象 是不是我们数组里所声明的,可以删除的.
    if(tagarr.indexOf(tagname) > -1){      
      //调用dt.get() 参数就是get_tag函数event参数的值的target
      dt.get($(ele));
    }  
    
  }

  $('#del').click(function(){  
    
    //这里,由于创建了闭包.我们上次点击的对象被保存了起来.
    //所以这里可以直接调用dt.del() 删除对象
    dt.del();
  })

看看效果:

js获取鼠标点击的对象,点击另一个按钮删除该对象的实现代码

恩恩.看来对了.不是我们所定义的对象就不可以删除.

虽然和需求上说的删除文字有点区别.但是只要你告诉我你会用那些标签去承载文字.我就可以删除...

强调一下.我们的get_tag()函数可以别放在body或者html的onclick事件上.不然整个页面的文字一点就删除了....

get_tag()函数就绑定在你想删除文字那块div上.

以上这篇js获取鼠标点击的对象,点击另一个按钮删除该对象的实现代码就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
js 判断浏览器使用的语言示例代码
Mar 22 Javascript
javascript操作excel生成报表示例
May 08 Javascript
JavaScript中对象属性的添加和删除示例
May 12 Javascript
微信小程序 教程之注册程序
Oct 17 Javascript
ES6中class类用法实例浅析
Apr 06 Javascript
React-router中结合webpack实现按需加载实例
May 25 Javascript
详解使用nvm管理多版本node的方法
Aug 30 Javascript
基于vue2实现上拉加载功能
Nov 28 Javascript
原生JavaScript实现todolist功能
Mar 02 Javascript
微信小程序页面间跳转传参方式总结
Jun 13 Javascript
小程序click-scroll组件设计
Jun 18 Javascript
Vue+axios封装请求实现前后端分离
Oct 23 Javascript
最简单的tab切换实例代码
May 13 #Javascript
浅析创建javascript对象的方法
May 13 #Javascript
全面理解JavaScript中的闭包
May 12 #Javascript
Bootstrap框架动态生成Web页面文章内目录的方法
May 12 #Javascript
Node.js的项目构建工具Grunt的安装与配置教程
May 12 #Javascript
js自定义select下拉框美化特效
May 12 #Javascript
使用jQuery制作遮罩层弹出效果的极简实例分享
May 12 #Javascript
You might like
从刷票了解获得客户端IP的方法
2015/09/21 PHP
PHP+shell脚本操作Memcached和Apache Status的实例分享
2016/03/11 PHP
php的无刷新操作实现方法分析
2020/02/28 PHP
jQuery+PHP实现图片上传并提交功能
2020/07/27 PHP
jQuery中live方法的重复绑定说明
2011/10/21 Javascript
JQuery EasyUI 日期控件如何控制日期选择区间
2014/05/05 Javascript
上传图片预览JS脚本 Input file图片预览的实现示例
2014/10/23 Javascript
JavaScript获取并更改input标签name属性的方法
2015/07/02 Javascript
基于jQuery实现复选框是否选中进行答题提示
2015/12/10 Javascript
Bootstrap中的fileinput 多图片上传及编辑功能
2016/09/05 Javascript
jQuery模拟实现的select点击选择效果【附demo源码下载】
2016/11/09 Javascript
vue之nextTick全面解析
2017/05/17 Javascript
nodejs爬虫初试superagent和cheerio
2018/03/05 NodeJs
JavaScript设计模式之工厂模式简单实例教程
2018/07/03 Javascript
Vue2.2.0+新特性整理及注意事项
2018/08/22 Javascript
三种Webpack打包方式(小结)
2018/09/19 Javascript
React 路由懒加载的几种实现方案
2018/10/23 Javascript
微信小程序 调用微信授权窗口相关问题解决
2019/07/25 Javascript
vue多个元素的样式选择器问题
2019/11/29 Javascript
浅谈JavaScript节流和防抖函数
2020/08/25 Javascript
python基于queue和threading实现多线程下载实例
2014/10/08 Python
python执行子进程实现进程间通信的方法
2015/06/02 Python
Python与Java间Socket通信实例代码
2017/03/06 Python
python中copy()与deepcopy()的区别小结
2018/08/03 Python
pytorch中torch.max和Tensor.view函数用法详解
2020/01/03 Python
Numpy中ndim、shape、dtype、astype的用法详解
2020/06/14 Python
通过代码实例解析Pytest运行流程
2020/08/20 Python
"引用"与多态的关系
2013/02/01 面试题
西门豹教学反思
2014/02/04 职场文书
大学生实习鉴定评语
2014/04/25 职场文书
另类冲刺标语
2014/06/24 职场文书
政法干警核心价值观心得体会
2014/09/11 职场文书
2015年学校禁毒工作总结
2015/05/27 职场文书
2016年教师新年寄语
2015/08/18 职场文书
Redis字典实现、Hash键冲突及渐进式rehash详解
2021/09/04 Redis
mysql事务隔离级别详情
2021/10/24 MySQL