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

如何获取ID动态生成的DIV元素并通过jQuery AJAX更新内容

问题:动态生成ID的DIV元素无法被选中填充内容

我是JavaScript新手,现在有个很简单的需求不知道怎么实现。
我的HTML页面会生成一系列ID为动态生成的DIV元素。
示例:<div id="shots_234"></div>、<div id="shots_256"></div>
我现在发起一个jQuery AJAX请求,想要将接口返回的HTML内容填充到对应ID的DIV中。
我编写的代码如下:

function WeddingsShotDown(shotid, segmentid) {

    document.getElementById('ShotDownId').value = shotid;

    var form = document.getElementById('ShotDown');
    var formData = new FormData(form);
    var id = "shots_" + segmentid;
    var divid = document.getElementById(id);

    console.log("Div: " + divid);

    $.ajax({
        url: '/Weddings/ShotDown',
        type: 'POST',
        data: formData,
        dataType: 'html',
        processData: false,
        contentType: false,
        success: function (response) {
            if (response) {
                $("#shots_" + segmentid).html(response);
                document.getElementById('ShotId').value = "";
                showNotification("success", "Your shot sequence has been updated", "far fa-check-circle");
            } else {
                showNotification("danger", "Error saving shot sequence", "far fa-check-circle");
            }
        }
    });
}

但是不管是使用jQuery写法:

$("#shots_" + segmentid).html(response);

还是原生JavaScript写法:

var id = "shots_" + segmentid;
var divid = document.getElementById(id);

都无法获取到目标DIV元素,请问我要怎么才能正确更新该元素的内容?


解决方案

你可以按以下顺序排查问题,90%以上的同类问题都是以下几个原因导致的:

  • 确认元素是否已经插入DOM
    很多时候函数调用时机早于动态DIV生成的时机,此时DOM里还没有对应元素,自然获取不到。你可以在var divid = document.getElementById(id);这行代码前先打印整个页面的DOM内容,或者直接打开浏览器的元素检查面板,确认函数执行时目标DIV已经存在于页面中。
  • 确认拼接的ID和实际ID完全一致
    在var id = "shots_" + segmentid;后添加一行日志:console.log('生成的ID为:', id),对比控制台输出的ID和页面上实际DIV的ID是否完全匹配,注意ID是大小写敏感的,同时要检查segmentid是否携带多余的空格、特殊字符,或者传参错误。
  • 确认页面无重复ID
    HTML规范要求ID全局唯一,如果页面存在多个相同ID的元素,选择器只会返回第一个匹配项,甚至返回null。你可以在浏览器控制台执行$("[id='"+id+"']").length,如果返回结果大于1,说明存在重复ID,需要调整动态生成ID的逻辑保证唯一性。
  • 确认元素不在隔离DOM容器中
    如果目标DIV是放在iframe、自定义组件的Shadow DOM这类隔离的DOM容器里,直接用document.getElementById无法查询到。如果是iframe内的元素,需要先拿到iframe的contentDocument再查询;如果是Shadow DOM内的元素,需要先拿到组件的shadowRoot再查询。

你可以先在浏览器控制台直接执行document.getElementById('shots_xxx')(把xxx换成你实际的segmentid),如果能拿到元素,说明是函数执行时机或参数问题;如果拿不到,说明元素确实不在当前DOM的查询范围内,按上面的几个方向排查即可。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 16:24:05