用原生實(shí)現(xiàn)點(diǎn)擊刪除點(diǎn)擊的li

簡單的實(shí)現(xiàn)方式

<!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("請輸入有效的數(shù)字");
            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("請輸入有效的數(shù)字");
                     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">左側(cè)入</button>
        <button id="rightin">右側(cè)入</button>
        <button id="leftout">左側(cè)出</button>
        <button id="rightout">右側(cè)出</button>
    </div>
     <ul id="result">
     </ul>



</body>
</html>

這種方法原理是用For循環(huán)來為li添加點(diǎn)擊事件释移,然后點(diǎn)到它的時候去刪除ul的子節(jié)點(diǎn)

for (var i = 0; i < oLi.length; i++) {
                           console.log(oLi[i]);
                           oLi[i].onclick = function(e) {
                               oUl.removeChild(e.target);
                           }
                        };

這里需要說明一點(diǎn),為什么不用

oUl.removeChild(oLi[i]);

因?yàn)樵邳c(diǎn)擊oLi[i]的時候辽狈,找不到所以的li節(jié)點(diǎn)慈参,而且在這里的我們耶不是想要找所有的li節(jié)點(diǎn),而是想找當(dāng)前的刮萌。

所以驮配,這里可以用

oUl.removeChild(e.target);
或
oUl.removeChild(this);

在這里說一下target

target 事件屬性可返回事件的目標(biāo)節(jié)點(diǎn)(觸發(fā)該事件的節(jié)點(diǎn)),如生成事件的元素着茸、文檔或窗口壮锻。

然后就是一種高級一點(diǎn)的方法

<!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">左側(cè)入</button>
        <button id="rightin">右側(cè)入</button>
        <button id="leftout">左側(cè)出</button>
        <button id="rightout">右側(cè)出</button>
    </div>
     <ul id="result">
     </ul>
 <script>
     var $=function(id){
       return document.getElementById(id);
     }
     var number=[];
     //給按鈕的父元素添加事件委托,避免給每個按鈕添加點(diǎn)擊事件
     $("button").addEventListener("click",function(e){  
         var target=e.target,
             value=$("input").value;
         switch(target.id){
             case "leftin":{
                 if(!/^\d+$/.test(value))alert("請輸入有效的數(shù)字");
                 else{
                     number.unshift(value);
                 show();
                 }
                 break;
             }
             case "rightin":{
                 if(!/^\d+$/.test(value)) alert("請輸入有效的數(shù)字");
                 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;
             }
         }
     })
     //給輸出的結(jié)果添加事件委托涮阔,使點(diǎn)擊的元素被刪除
        $("result").addEventListener("click",function(e){
         var target=e.target;
        if(target.nodeName!="LI") return;
         var tar=parseInt(target.getAttribute("id"));   //到被點(diǎn)擊元素的id屬性猜绣,之前id綁定的是該元素在數(shù)組中的序號
         number.splice(tar,1);   //刪除數(shù)組number中的元素,1代表只刪除一個元素
         show();
         return number;
     })
    //將得到的用戶輸入數(shù)據(jù)輸出顯示到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>

它的主要亮點(diǎn)是刪除數(shù)組中的對應(yīng)項(xiàng)來達(dá)到刪除li的效果

$("result").addEventListener("click",function(e){
         var target=e.target;
        if(target.nodeName!="LI") return;
         var tar=parseInt(target.getAttribute("id"));   //到被點(diǎn)擊元素的id屬性敬特,之前id綁定的是該元素在數(shù)組中的序號
         number.splice(tar,1);   //刪除數(shù)組number中的元素掰邢,1代表只刪除一個元素
         show();
         return number;

這個代碼還有一個亮點(diǎn)就是用了case語句,從而只添加了一個監(jiān)聽事件伟阔。

寫這個小dome給我的感受是辣之,我在寫代碼的過程中多思考的是html中元素的問題。插入和刪除我都會從刪除文本節(jié)點(diǎn)的方面去考慮皱炉,對js的應(yīng)用處于表層召烂,而別人的代碼,則是基于一些js自帶的函數(shù)考慮娃承,更符合一門編程語言奏夫。這是我以后需要學(xué)習(xí)的。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末历筝,一起剝皮案震驚了整個濱河市酗昼,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌梳猪,老刑警劉巖麻削,帶你破解...
    沈念sama閱讀 217,509評論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異春弥,居然都是意外死亡呛哟,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,806評論 3 394
  • 文/潘曉璐 我一進(jìn)店門匿沛,熙熙樓的掌柜王于貴愁眉苦臉地迎上來扫责,“玉大人,你說我怎么就攤上這事逃呼”罟拢” “怎么了者娱?”我有些...
    開封第一講書人閱讀 163,875評論 0 354
  • 文/不壞的土叔 我叫張陵,是天一觀的道長苏揣。 經(jīng)常有香客問我黄鳍,道長,這世上最難降的妖魔是什么平匈? 我笑而不...
    開封第一講書人閱讀 58,441評論 1 293
  • 正文 為了忘掉前任框沟,我火速辦了婚禮,結(jié)果婚禮上增炭,老公的妹妹穿的比我還像新娘街望。我一直安慰自己,他們只是感情好弟跑,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,488評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著防症,像睡著了一般孟辑。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上蔫敲,一...
    開封第一講書人閱讀 51,365評論 1 302
  • 那天饲嗽,我揣著相機(jī)與錄音,去河邊找鬼奈嘿。 笑死貌虾,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的裙犹。 我是一名探鬼主播尽狠,決...
    沈念sama閱讀 40,190評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼叶圃!你這毒婦竟也來了袄膏?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,062評論 0 276
  • 序言:老撾萬榮一對情侶失蹤掺冠,失蹤者是張志新(化名)和其女友劉穎沉馆,沒想到半個月后,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體德崭,經(jīng)...
    沈念sama閱讀 45,500評論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡斥黑,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,706評論 3 335
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了眉厨。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片锌奴。...
    茶點(diǎn)故事閱讀 39,834評論 1 347
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖憾股,靈堂內(nèi)的尸體忽然破棺而出缨叫,到底是詐尸還是另有隱情椭符,我是刑警寧澤,帶...
    沈念sama閱讀 35,559評論 5 345
  • 正文 年R本政府宣布耻姥,位于F島的核電站销钝,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏琐簇。R本人自食惡果不足惜蒸健,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,167評論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望婉商。 院中可真熱鬧似忧,春花似錦、人聲如沸丈秩。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,779評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽蘑秽。三九已至饺著,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間肠牲,已是汗流浹背幼衰。 一陣腳步聲響...
    開封第一講書人閱讀 32,912評論 1 269
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留缀雳,地道東北人渡嚣。 一個月前我還...
    沈念sama閱讀 47,958評論 2 370
  • 正文 我出身青樓,卻偏偏與公主長得像肥印,于是被迫代替她去往敵國和親识椰。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,779評論 2 354

推薦閱讀更多精彩內(nèi)容

  • (續(xù)jQuery基礎(chǔ)(1)) 第5章 DOM節(jié)點(diǎn)的復(fù)制與替換 (1)DOM拷貝clone() 克隆節(jié)點(diǎn)是DOM的常...
    凜0_0閱讀 1,338評論 0 8
  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,111評論 25 707
  • 今天面試回來深碱,稍微整理下今天被問到的題目裤唠,呀,回答的是亂七八糟莹痢,最后百度整理下种蘸,以供以后學(xué)習(xí)。 1,vue 中事件...
    AlisaMfz閱讀 478評論 0 0