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