鍍金池/ 問答/HTML/ jquery的事件委托與原生的事件委托有什么區(qū)別

jquery的事件委托與原生的事件委托有什么區(qū)別

想通過適配器模式,用原生適配jquery里的on方法。發(fā)現(xiàn)無法實(shí)現(xiàn)
html代碼:

<ul id="list">
    <li><span>1</span><i>&times;</i></li>
</ul>
<button id="btn">點(diǎn)我添加li</button>
<script type="text/javascript" src="js/our.js"></script>
<script type="text/javascript" src="js/jquery-1.7.2.js"></script>
<script type="text/javascript" src="js/adapter.js"></script>
<script type="text/javascript">
    var list = ada.$("list");
    ada.on(list, "click", function(e){
        if(e.target.tagName.toLowerCase() === "li"){
            ada.css(e.target,{
                backgroundColor: "red"
            })
        }else if(e.target.tagName.toLowerCase() === "i"){
            list.children(ada.parent(e.target)).remove();
        }
    });
    var btn = ada.$("btn");
    ada.on(btn, "click", function(){
        var li_html = "<li><span>1</span><i>&times;</i></li>";
        ada.html(list, ada.html(list) + li_html);
    })
</script>

our.js:


var ada = {
    $: function(id){
        return document.getElementById(id);
    },
    css: function(dom, key, value){
        if(typeof key === "object" && key != null){
            for(var i in key){
                ada.css(dom, i, key[i]); 
            }
        }else{
            dom.style[key] = value;        
        }
    },
    html: function(dom, text){
        if(arguments.length === 2){
            dom.innerHTML = text;
        }else{
            return dom.innerHTML;
        }
    },
    on: function(dom, type, handler){
        dom.addEventListener(type, handler);
    },
    parent: function(dom){
        return dom.parentNode;
    }
}

adapter.js

var ada = {
    $: function(id){
        return $("#" + id);
    },
    css: function(dom, key, value){
        $(dom).css(key, value);
    },
    html: function(dom, text){
        if(arguments.length === 2){
             $(dom).html(text);
        }else{
            return $(dom).html();
        }
    },
    on: function(dom, type, handler){
        $(dom).on(type, handler);
    },
    parent: function(dom){
        return $(dom).parent();
    }
}

現(xiàn)在我想實(shí)現(xiàn)的效果是:當(dāng)點(diǎn)擊x的時(shí)候會把當(dāng)前的這個(gè)li刪除。但現(xiàn)在是點(diǎn)擊x時(shí),會把所有的li都刪掉。那有什么方法能避免這個(gè)問題嗎。是什麼問題導(dǎo)致這個(gè)問題的發(fā)生呢

回答
編輯回答
熊出沒

jQuery的事件委托相比于原生的只是做了兼容性處理,也就是使用了適配器模式。jQuery的事件處理就是這個(gè)特點(diǎn)。

2018年5月6日 12:31
編輯回答
若相惜

大兄弟。。
jq on我要是沒記錯(cuò)的話是 on(type,dom,callback)

2018年7月20日 08:00