JQuery 添加元素,包括删除侦听器

Posted

技术标签:

【中文标题】JQuery 添加元素,包括删除侦听器【英文标题】:JQuery adding elements including a remove listener 【发布时间】:2012-02-10 20:33:03 【问题描述】:

添加元素的最佳方式是什么?删除自己的链接,到 div? 这几乎可以工作:

function displayElements(objekt) 
    $('#container').empty();
    for(var key in objekt) 
        if(objekt.hasOwnProperty(key)) 
            $('#container').append('<div id="' + key + '">' + 
                key +
                '<a id="del' + key + '">delete'</a></div>');
            $('#del' + key).click(function() 
                delete objekt[key];
                displayElements(objekt);
            );
        
    

奇怪的效果是,无论我点击哪个删除链接,总是最后一个元素被删除。 为什么会这样?有没有更优雅的方式来实现这一点?

问候,埃里克

【问题讨论】:

【参考方案1】:

您可以将其替换为:

// build your markup
function displayElements(objekt) 
    var container = $('#container').empty();
    for (var key in objekt) 
        if (objekt.hasOwnProperty(key)) 
            container.append('<div id="' + key + '">' + key + '<a id="del' + key + '">delete< /a></div > ');
        
    



displayElements(objekt);

// bind to all anchors who's ids start with 'del'
$("#container").on("click", "a[id^='del']", function() 
    $(this).remove();
);

【讨论】:

谢谢 - 它工作得很好,而且这样更干净! $(this).remove() 只删除了链接而不是 div。我使用了 $(this).parent().remove() 并完成了。再次感谢!【参考方案2】:

我会将事件内容移出循环:

function displayElements(objekt) 
  $('#container').empty();

  for (var key in objekt) 
    if (objekt.hasOwnProperty(key)) 
      var $div = $('<div />');
      $div.prop('class', 'delete');
      $div.append($('<a />').attr('id', 'del' + key).text('delete'));
    
  


$('.delete').on('click', 'a[id^="del"]', function() 
  // Delete your stuff
);

【讨论】:

以上是关于JQuery 添加元素,包括删除侦听器的主要内容,如果未能解决你的问题,请参考以下文章

如何将事件侦听器添加到 ag 网格单元格内的元素(使用 js 或 jquery,不是 angular,不是 reactjs,不是 vue)

jQuery 学习03——HTML:捕获设置添加元素删除元素CSS类CSS()方法尺寸

jquery 动态添加的元素 怎么删除元素

jQuery 操作

JQUERY添加删除元素

JQuery添加元素和删除元素几种方法的区别