如何使用jquery删除最后一个元素?

时间:2016-11-05 10:02:16

标签: javascript jquery html

这里我试图创建一个一次最多读取10个数字的调用板,并将这些数字连续显示为最多6个数字。它在功能上起作用。我想在用户按下清除按钮时删除最后一个号码。

我使用$("#calling-pad").last().remove();尝试删除最后一个号码,但它删除了所有内容,但不允许输入新号码。我该如何解决?

var key = 1;

$("#nine").click(function(){
    if (p === 1) {
        $("#mini-screen").css("display","none");
        $("#number-screen").css("display","block");
        if (key < 11) {
            if ((key % 7) !== 0) {
                $("#calling-pad").append("9");
                key = key + 1;
            }
            else {
                $("#calling-pad").append("<br>");
                $("#calling-pad").append("9"); 
                key = key + 1;
            }
        }    
    } 
});

$("#inner-icon-one").click(function(){
    if (p === 1) {
        $("#mini-screen").css("display","none");
        $("#number-screen").css("display","block"); 
        if (key > 1) {
            if ((key%6) !== 0) {
                $("#calling-pad").last().remove();
                key = key - 1;

                if ( key === 1) {
                    $("#number-screen").css("display","none"); 
                    $("#mini-screen").css("display","block");   
                }
            }
        }
    }
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<span id="calling-pad"> </span>

4 个答案:

答案 0 :(得分:9)

您只是将数字附加到span标记,而不是真正跟踪用户输入。

$("#calling-pad").last().remove();

告诉jQuery删除完整内容,因为您没有在calling-pad范围内插入任何子元素。

因此,您可以使用数组来跟踪用户数字或使用计数器,如下所示。

var totalInputs = 0;

$("#insert").on("click", function() {
     totalInputs++;
     var inputText = $("#input").val();
     var id = "calling_" + totalInputs;
     $("#calling-pad").append("<span id='" + id + "'>" + inputText + "</span>");
});

$("#remove").on("click", function() {
    $("#calling_" + totalInputs).remove();
    totalInputs--;
});
span {
   display: block;  
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>

<input type="text" id="input" /> 
<button id="insert">Insert</button>

<div id="calling-pad">
</div>

<button id="remove">Remove last element</button>

答案 1 :(得分:2)

$("#calling-pad").contents().last().remove();
if ($("#calling-pad").contents().last().is("br")) {
    $("#calling-pad").contents().last().remove();
}

当你正在处理textNodes时,你需要使用.contents() - <br>将它们分开,所以不需要解析东西,如果你要删除最后一个节点,你需要同时删除最后一个休息时间......

答案 2 :(得分:2)

您需要一行来删除最后一条评论...无需计算ID ... 这里是片段...干杯男人

&#13;
&#13;
$("#insert").on("click", function() {
     var inputText = $("#input").val();
     $("#calling-pad").append("<span>" + inputText + "</br></span>");
});

$("#remove").click(function(){
  $("#calling-pad").children("span:last").remove()
})
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>

<input type="text" id="input" /> 
<button id="insert">Insert</button>

<div id="calling-pad">
</div>

<button id="remove">Remove last one</button>
&#13;
&#13;
&#13;

答案 3 :(得分:1)

问题 - 使用'last'代替':last-child'

jQuery last方法找不到子元素。相反,给定与选择器匹配的元素集合,它会过滤该集合以仅包含最后一个元素。将它与id-selector(即$("#element-id").last())相结合总是多余的,因为$("#element-id")只匹配单个元素,并且生成的jQuery对象总是大小为1.如果只有一个元素,那么它总是最后一个。

因此,$("#calling-pad").last().remove();$("#calling-pad").remove();实际上相同。

解决方案

相反,当您将数据附加到#calling-pad元素时,请确保它们作为新元素包含在内(例如包含在<span></span>标记中):

$('#calling-pad').append("<span>9</span>");

然后,当你想删除#calling-pad中的最后一个元素时,你只需要这样做:

$('#calling-pad > span:last-child').remove();

这会找到span的直接子项的所有#calling-pad元素,过滤仅包含最后一个元素(使用:last-child),然后删除该元素。