You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用JavaScript从元素最近的相邻input值中移除指定字符串

问题原因

你代码的问题出在两点:

  1. DOM结构匹配错误:从你给出的HTML结构来看,.input输入框是.myBlock容器的同级兄弟元素,不是它的内部后代元素,你用find()方法是在父容器内部查找元素,自然找不到目标input。
  2. 执行顺序错误:你先执行了$('[data-id="' + id + '"]').remove(),会直接把点击的.deletImg所属的.addedImg元素从DOM树移除,此时再基于被移除的元素向上查找父级,也会定位失败。

解决方法

调整操作顺序,同时用更稳定的DOM选择方式替换硬编码的父级索引查找,修正后的代码如下:

$(document).on('click', '.deletImg', function() {
  var $this = $(this);
  var id = $this.attr('data-id');

  var removeValue = function(list, value, separator) {
    separator = separator || ",";
    var values = list.split(separator);
    for (var i = 0; i < values.length; i++) {
      if (values[i] == value) {
        values.splice(i, 1);
        return values.join(separator);
      }
    }
    return list;
  }

  // 先定位input元素,修改值
  var $input = $this.closest('.myBlock').next('.input');
  var inp = $input.val();
  inp = removeValue(inp, id);
  $input.val(inp);

  // 最后再删除对应的DOM元素
  $('[data-id="' + id + '"]').remove();
});

修改说明

  • 把删除DOM的操作放到最后,保证定位元素时,点击节点还在DOM树中
  • 用closest('.myBlock')向上查找最近的外层容器,避免硬写parents().eq(1)的脆弱性(后续DOM层级调整也不会失效)
  • 用next('.input')查找容器后面的同级input元素,匹配你的实际DOM结构
  • 把查询到的input元素存为变量,避免重复查询DOM提升性能

内容的提问来源于stack exchange,提问作者drago

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.27 00:36:03