js獲取鼠標(biāo)點(diǎn)擊的對象,點(diǎn)擊另一個按鈕刪除該對象的實(shí)現(xiàn)代碼
今天遇到一個很奇葩的需求,是這樣的:當(dāng)我點(diǎn)擊文字的時候彈出一個刪除按鈕,可以刪除剛才點(diǎn)擊的文字.
誒?當(dāng)時想了想,沒什么難度吧.可是,既然是奇葩的需求怎么可能這么簡單.
對,還有一個功能.我并不知道我點(diǎn)了哪個標(biāo)簽,英文可以承載文字的標(biāo)簽太多太多....
當(dāng)時我tm就懵逼了.你都不知道要點(diǎn)哪個標(biāo)簽,我怎么去綁定事件?給誰綁定事件? 扯了半天,還是要寫.于是就動工了.
我思路是這樣的:
START
1,首先得獲取鼠標(biāo)點(diǎn)擊的對象.(問題是...我怎么知道點(diǎn)了哪個)
那么先寫個函數(shù)去獲取鼠標(biāo)點(diǎn)擊的對象吧
get_tag這個函數(shù)被綁定在body的onclick事件上,然后接受了一個event參數(shù);
然后event對象有個target屬性,是可以直接獲取鼠標(biāo)點(diǎn)擊的對象.
我們log看看
恩,可以的.和預(yù)先的思路一致.得到了想要的結(jié)果.
2, 得到對象.可是要怎么刪除呢?
var del_tag = function(){ var tag=null; return { get:function(e){ tag = e; }, del:function(){ $(tag).remove(); } } }
由于刪除按鈕和我們鼠標(biāo)所點(diǎn)擊的對象并沒有什么聯(lián)系.所以我們得寫個閉包,聲明一個tag去保存我們所點(diǎn)擊的對象.
然后返回兩個函數(shù),一個get.用來獲取鼠標(biāo)上次點(diǎn)擊的對象.一個是del.顧名思義,刪除點(diǎn)擊的對象.
由于是閉包,所以tag會被保存到內(nèi)存中.正好實(shí)現(xiàn)所要的功能.
3. 二者結(jié)合
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; //調(diào)用dt.get() 參數(shù)就是get_tag函數(shù)event參數(shù)的值的target dt.get($(ele)); } $('#del').click(function(){ //這里,由于創(chuàng)建了閉包.我們上次點(diǎn)擊的對象被保存了起來. //所以這里可以直接調(diào)用dt.del() 刪除對象 dt.del(); })
4.看看效果
5.效果還不錯.可是..隨便點(diǎn)擊某個對象都可以刪除.這是不是就亂套了?接著改
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數(shù)組. 用來存儲我們想刪除的對象 var tagarr = ['SPAN','H1','H2','H3','H4','H5','H6','P']; //判斷如果我們點(diǎn)擊的對象 是不是我們數(shù)組里所聲明的,可以刪除的. if(tagarr.indexOf(tagname) > -1){ //調(diào)用dt.get() 參數(shù)就是get_tag函數(shù)event參數(shù)的值的target dt.get($(ele)); } } $('#del').click(function(){ //這里,由于創(chuàng)建了閉包.我們上次點(diǎn)擊的對象被保存了起來. //所以這里可以直接調(diào)用dt.del() 刪除對象 dt.del(); })
看看效果:
恩恩.看來對了.不是我們所定義的對象就不可以刪除.
雖然和需求上說的刪除文字有點(diǎn)區(qū)別.但是只要你告訴我你會用那些標(biāo)簽去承載文字.我就可以刪除...
強(qiáng)調(diào)一下.我們的get_tag()函數(shù)可以別放在body或者h(yuǎn)tml的onclick事件上.不然整個頁面的文字一點(diǎn)就刪除了....
get_tag()函數(shù)就綁定在你想刪除文字那塊div上.
以上這篇js獲取鼠標(biāo)點(diǎn)擊的對象,點(diǎn)擊另一個按鈕刪除該對象的實(shí)現(xiàn)代碼就是小編分享給大家的全部內(nèi)容了,希望能給大家一個參考,也希望大家多多支持腳本之家。
- JS在Array數(shù)組中按指定位置刪除或添加元素對象方法示例
- js刪除對象/數(shù)組中null、undefined、空對象及空數(shù)組方法示例
- JavaScript數(shù)組,JSON對象實(shí)現(xiàn)動態(tài)添加、修改、刪除功能示例
- JS實(shí)現(xiàn)對json對象排序并刪除id相同項(xiàng)功能示例
- 在Javascript操作JSON對象,增加 刪除 修改的簡單實(shí)現(xiàn)
- JavaScript數(shù)組Array對象增加和刪除元素方法總結(jié)
- js delete 用法(刪除對象屬性及變量)
- javascript動態(tài)添加、修改、刪除對象的屬性與方法詳解
- Javascript根據(jù)指定下標(biāo)或?qū)ο髣h除數(shù)組元素
- JS刪除對象中某一屬性案例詳解
相關(guān)文章
javascript計時器編寫過程與實(shí)現(xiàn)方法
這篇文章主要為大家詳細(xì)介紹了javascript計時器編寫過程與實(shí)現(xiàn)方法,具有一定的參考價值,感興趣的小伙伴們可以參考一下2016-02-02document.styleSheets[0].rules 與 cssRules區(qū)別
document.styleSheets[0].rules 與 cssRules區(qū)別...2007-08-08javascript實(shí)現(xiàn)點(diǎn)擊后變換按鈕顯示文字的方法
這篇文章主要介紹了javascript實(shí)現(xiàn)點(diǎn)擊后變換按鈕顯示文字的方法,可實(shí)現(xiàn)顯示一些按鈕如果點(diǎn)擊了,按鈕文本變?yōu)椤包c(diǎn)了”,其他按鈕文本變?yōu)椤皼]點(diǎn)”的效果,非常具有實(shí)用價值,需要的朋友可以參考下2015-05-05js跨域和ajax 跨域問題的實(shí)現(xiàn)思路
大家都知道js是不能跨域的,但我們有時候就要這么用,怎么辦呢?辦法總是有的.2009-09-09JS實(shí)現(xiàn)n秒后自動跳轉(zhuǎn)的兩種方法
這篇文章主要為大家詳細(xì)介紹了JS實(shí)現(xiàn)n秒后自動跳轉(zhuǎn)的兩種方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2016-07-07JS寫XSS cookie stealer來竊取密碼的步驟詳解
JavaScript是web中最常用的腳本開發(fā)語言,js可以自動執(zhí)行站點(diǎn)組件,管理站點(diǎn)內(nèi)容,在web業(yè)內(nèi)實(shí)現(xiàn)其他有用的函數(shù)。這篇文章主要介紹了JS寫XSS cookie stealer來竊取密碼的步驟詳解,需要的朋友可以參考下2017-11-11