【问题标题】:Remove elements onclick (including the remove button itself) with jQuery使用 jQuery 删除元素 onclick(包括删除按钮本身)
【发布时间】:2011-05-27 00:36:49
【问题描述】:

我知道有些问题看起来像我的问题,但在这种情况下,我希望删除按钮也被删除,但我不知道该怎么做。

这是我的问题:

单击追加按钮时,我使用 jQuery 追加 3 个元素。 包括一个删除按钮。

我希望这个移除按钮能够自行移除它和其他两个元素。 计数器应该具有相同的 ID,但我不确定我是否使用 jQuery 正确地做到了这一点。

如何删除三个元素,包括点击删除按钮?

$(function() {
    var counter = 0;
    
    $('a').click(function() {
        $('#box').append('<input type="checkbox" id="checkbox" + (counter) + "/>');
        $('#box').append('<input type="text" id="t1" + (counter) + "/>');
        $('#box').append('<input type="button" value="." id="removebtn" + (counter) + "/>');
        $("#box").append("<br />");
        $("#box").append("<br />");
        counter++;
    });
         
    $('removebtn').click(function() {
        remove("checkbox");
    });
});

【问题讨论】:

    标签: jquery button append


    【解决方案1】:

    假设您的删除按钮的 ID 是#removebtn1234。那么

    $("#removebtn1234").click(function(){
        $(this).remove();
    });
    

    应该工作

    但为了更容易操作多个项目,我建议你修改如下:

    $('a').click(function() {
      $('#box').append('<input type="checkbox" data-id="' + counter + '"/>');
      $('#box').append('<input type="text" data-id="' + counter + '"/>');
      $('#box').append('<input type="button" value="." class="removebtn" data-id="' + counter + '"/>');
      $("#box").append("<br /><br/>");
      counter++;
    });
    
    $(".removebtn").click(function(){
       var id = $(this).data("id");
       $("*[data-id=" + id + "]").remove();
    });
    

    【讨论】:

    • 喜欢这个? $("#removebtn1234").click(function(){ $(this).remove(); $("el1" + counter").remove(); $("el2" + counter").remove() ; });
    • 我修改了答案,你仍然可以放id,但我只是将id画出来作为数据字段以便于操作。
    • 非常感谢 xandy,虽然附加按钮不再使用此代码附加任何内容
    【解决方案2】:

    我的建议是这样的。

    $(function () {
        var counter = 0;
    
        $('a').click(function () {
            var elems = '<div>'+
                  '<input type="checkbox" id="checkbox"' + (counter) + '" class="item"/>' + 
                  '<input type="text" id="t1"' + (counter) + '"/>' +
                  '<input type="button" class="removebtn" value="." id="removebtn"' + (counter) + '"/>' +
            '</div>';
            $('#box').append(elems);
            $("#box").append("<br />");
            $("#box").append("<br />");
            counter++;
        });
    
        $('.removebtn').live(function () {
            $(this).parent().remove();   
        });
    });
    

    simple demo

    【讨论】:

    • 只是提一下,对于任何使用 jQuery 版本 >=1.7 的读者,现在不推荐使用 .live() 方法。我们应该使用 .on() 方法来附加事件处理程序。所以最后几行应该改为: $(document).on('click', '.removebtn', function () { $(this).parent ().remove();
    【解决方案3】:

    这是一个解决方案(看起来比它应该的更混乱,但我无法将手指放在它上面)。

    $(function() {
        var counter = 0;
    
        $('a').click(function() {
    
            var checkBox = $('<input type="checkbox" id="checkbox' + (counter) + '"/>'),
                textBox = $('<input type="text" id="t1' + (counter) + '"/>'),
                removeButton = $('<input type="button" value="." id="removebtn' + (counter) + '"/>'),
                containerDiv = $("<div />");
    
            removeButton.click(function(e) {
                e.preventDefault();
                containerDiv.remove();
            });
    
            containerDiv
                .append(checkBox)
                .append(textBox)
                .append(removeButton);
    
            counter++;
    
            $("#box").append(containerDiv);
        });
    });
    

    在这个解决方案中,我创建了一个 jQuery 引用的变量。这样我们就可以调用像checkBox.remove() 这样的东西,它只会引用那个复选框(而不是试图计算出 URL)。

    我对其进行了一些修改并删除了&lt;br /&gt; 标记并将所有内容包装在&lt;div /&gt; 中。这样,您只需删除容器 div,所有元素都会消失。

    示例:http://jsfiddle.net/jonathon/YuyPB/

    【讨论】:

    • 谢谢,比正确答案更好,因为它即使在 jquery 1.9.1 版本之后也能正常工作。
    猜你喜欢
    • 1970-01-01
    • 2012-02-10
    • 1970-01-01
    • 2023-03-24
    • 2013-07-18
    • 2015-07-08
    • 2021-06-16
    • 2014-07-23
    • 1970-01-01
    相关资源
    最近更新 更多