javascript - 如何在使用 Jquery 删除许多 DIV 元素时重置计数和修改类名

标签 javascript jquery

我有一个 div 元素,每个元素都有一个删除按钮,就像这个例子:

<div class="elfile_1 fcot">lorem ipsum <button type="button" class="btn btn-default btn-sm" onclick="delete_file(1)"><i class="fa fa-times" aria-hidden="true"></i></button></div>
<div class="elfile_2 fcot">lorem ipsum <button type="button" class="btn btn-default btn-sm" onclick="delete_file(2)"><i class="fa fa-times" aria-hidden="true"></i></button></div>
<div class="elfile_3 fcot">lorem ipsum <button type="button" class="btn btn-default btn-sm" onclick="delete_file(3)"><i class="fa fa-times" aria-hidden="true"></i></button></div>

<script>
 function delete_file(idx){
  $('.elfile_'+idx).remove();
 }
</script>

效果很好,但现在我想重置这些元素的数量,所以我尝试更改为:

function delete_file(idx){
  $('.elfile_'+idx).remove();
  var inputs = $(".fcot");

  for(var i = 0; i < inputs.length; i++){ 
    $(".fcot").each(function(){              
       $(this).attr('class',$(this).attr('class').replace(/\belfile.*?\b/g, ''));
       $(this).addClass('elfile_'+i);

       $(this).find('button').each(function() {
           $(this).attr('onclick', 'delete_file('+i+')');
       });
    });
  }
}

但是,例如,当我删除第二个元素时它不起作用,因为我得到了这个:

<div class="fcot  elfile_1">lorem ipsum <button type="button" class="btn btn-default btn-sm" onclick="delete_file(1)"><i class="fa fa-times" aria-hidden="true"></i></button></div>
<div class="fcot  elfile_1">lorem ipsum <button type="button" class="btn btn-default btn-sm" onclick="delete_file(1)"><i class="fa fa-times" aria-hidden="true"></i></button></div>

我想得到这个:

<div class="fcot  elfile_1">lorem ipsum <button type="button" class="btn btn-default btn-sm" onclick="delete_file(1)"><i class="fa fa-times" aria-hidden="true"></i></button></div>
<div class="fcot  elfile_2">lorem ipsum <button type="button" class="btn btn-default btn-sm" onclick="delete_file(2)"><i class="fa fa-times" aria-hidden="true"></i></button></div>

我该如何解决?

我需要你的帮助。

最佳答案

如果您使用计数器只是为了了解需要删除的元素,那么请相信我……根本不要这样做。有一种更简单的方法。

onclick 中传递“this”上下文并在 javascript 中使用它。

  function delete_file(me) {
    $(me).closest('div.fcot').remove();
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.0.3/jquery.min.js"></script>
<div class="fcot">lorem ipsum <button type="button" class="btn btn-default btn-sm" onclick="delete_file(this)"><i class="fa fa-times" aria-hidden="true">a</i></button></div>
<div class="fcot">lorem ipsum <button type="button" class="btn btn-default btn-sm" onclick="delete_file(this)"><i class="fa fa-times" aria-hidden="true">b</i></button></div>
<div class="fcot">lorem ipsum <button type="button" class="btn btn-default btn-sm" onclick="delete_file(this)"><i class="fa fa-times" aria-hidden="true">c</i></button></div>

注意:

我会建议保持代码干净并将 javascript 和 HTML 分开。例如:

HTML:

<div class="fcot">lorem ipsum <button type="button" class="btn btn-default btn-sm some-button-name"><i class="fa fa-times" aria-hidden="true"></i></button></div>
<div class="fcot">lorem ipsum <button type="button" class="btn btn-default btn-sm some-button-name"><i class="fa fa-times" aria-hidden="true"></i></button></div>
<div class="fcot">lorem ipsum <button type="button" class="btn btn-default btn-sm some-button-name"><i class="fa fa-times" aria-hidden="true"></i></button></div>

Javascript:

$(function(){ //ready function to make sure DOM is loaded
    $('.some-button-name').click(function(){
          $(this).closest('div.fcot').remove(); 
     });  
});

脚本中的问题

如果以防万一,您想按照自己的方式(困惑的方式:)),那么您的代码的问题是,您有两个循环 1) for 和 2) foreach。 i 对于导致问题的 foreach 的单次迭代保持不变。 foreach() 每次都被传递一个数组索引和一个对应的数组值。所以使用它:

function delete_file(idx){
  $('.elfile_'+idx).remove();
  var inputs = $(".fcot");

  //for(var i = 0; i < inputs.length; i++){ 
    $(".fcot").each(function(i,v){              
       $(this).attr('class',$(this).attr('class').replace(/\belfile.*?\b/g, ''));
       $(this).addClass('elfile_'+ (i + 1)); // i + 1 here since index starts from 0

       $(this).find('button').each(function() {
           $(this).attr('onclick', 'delete_file('+ (i + 1) +')');
       });
    });
  //}
}

fiddle link我使用 stackoverflow 已经有一段时间了,所以不确定我是否可以在一个答案中包含两个片段,因此添加了 fiddle 链接。如果可能的话,如果有人可以编辑答案并在上面添加 fiddle 内容,那就太好了。 :)

关于javascript - 如何在使用 Jquery 删除许多 DIV 元素时重置计数和修改类名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52862498/

相关文章:

javascript - 与 Bootstrap 表内的嵌套循环进行淘汰赛绑定(bind)

javascript - 以类似的方式对 Phantom 3 Standard 进行编程,可以使用 NodeJS 对 Parrot AR 无人机进行编程

javascript - 解析查找查询后组件的 Reactjs 渲染

javascript - 在javascript中捕获Android手机中的 native 按钮点击

javascript - jquery获取背景渐变色

javascript - 我需要一些帮助来理解 JavaScript 中的对象字面量函数

javascript - 我可以显示/隐藏部分 div 吗?

javascript - 使用 Javascript 和 Jquery 的网站加载器进度条图像

jQuery .hide() 不会被媒体查询撤消

javascript - 在 Jquery 中切换元素显示的可靠方法