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

如何正确选取jQuery $.post返回的jqXHR中的div标签

问题解决方法

问题根源在于jQuery解析混合了table专属元素(如<tbody>)和普通块级元素(如<div>)的HTML字符串时,会对DOM结构进行自动调整,导致部分元素无法通过filter()直接定位(filter()仅匹配jQuery集合中的顶级元素)。以下是两种可行的解决方案:


方案一:修改Django模板,添加父容器

在返回的HTML外层包裹一个统一的父容器,确保所有元素都成为该容器的子元素,之后用find()即可轻松定位所有目标元素。

修改table.html模板:

<div class="response-container">
    <tbody id="queueTableBody">
        {% for x in unarchived %}
            <tr>
                <td> value 1 </td>
                ...
            </tr>
        {% endfor %}
    </tbody>

    <tbody id="archiveTableBody">
        {% for x in archived %}
            <tr>
                <td> value 1 </td>
                ...
            </tr>
        {% endfor %}
    </tbody>

    <div id="targetDivElet">{{ valueForDiv }}</div>
</div>

更新JS代码:

function getDbUpdate(){
    let _WaitTimes = JSON.stringify(compileWaitTimes());
    $.post("{% url 'checkForDbUpdate' %}",
        {_WaitTimes, csrfmiddlewaretoken: '{{ csrf_token }}'},
        function(data, status){
            if (status !== 'nocontent'){
                const $response = $(data);
                const queueTableHTML = $response.find("#queueTableBody").html();
                const archiveTableHTML = $response.find("#archiveTableBody").html();
                const targetDivContent = $response.find("#targetDivElet").html();
                
                $('#queueTable > tbody').replaceWith(queueTableHTML);
                $('#archiveTable > tbody').replaceWith(archiveTableHTML);
                // 仅更新div内容,而非替换整个div元素
                $('#targetDivElet').html(targetDivContent);
                // 若需替换整个div元素,改用:
                // const targetDivElement = $response.find("#targetDivElet").prop('outerHTML');
                // $('#targetDivElet').replaceWith(targetDivElement);
            }
        }
    );
};

方案二:在JS中创建临时容器(无需修改模板)

直接在JS里将返回的HTML字符串放入临时div容器,再通过find()定位元素,绕过jQuery的自动结构调整问题。

更新JS代码:

function getDbUpdate(){
    let _WaitTimes = JSON.stringify(compileWaitTimes());
    $.post("{% url 'checkForDbUpdate' %}",
        {_WaitTimes, csrfmiddlewaretoken: '{{ csrf_token }}'},
        function(data, status){
            if (status !== 'nocontent'){
                // 创建临时容器包裹返回的HTML
                const $temp = $('<div>').html(data);
                const queueTableHTML = $temp.find("#queueTableBody").html();
                const archiveTableHTML = $temp.find("#archiveTableBody").html();
                const targetDivContent = $temp.find("#targetDivElet").html();
                
                $('#queueTable > tbody').replaceWith(queueTableHTML);
                $('#archiveTable > tbody').replaceWith(archiveTableHTML);
                $('#targetDivElet').html(targetDivContent);
            }
        }
    );
};

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 10:02:04