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

Django页面使用.children()遍历div子元素时丢失最后一个元素的问题

解决jQuery遍历隐藏div时丢失表单元素的问题

问题根源

你碰到的问题核心是**children()方法的局限性**:它只会抓取当前元素的直接子节点,不会深入到嵌套的子元素层级里。看你的HTML结构就能明白:

  • 在mahal_questions里,mahal_id被包在<p>标签里,<p>是div的直接子元素,但mahal_id是<p>的子元素,所以$(div).children()只能拿到mahal_status、mahal_program和<p>标签本身,根本碰不到<p>里面的mahal_id。
  • 同理,currently_serving_questions里的tafkid也嵌套在<p>里,自然也会被children()忽略。

解决方案

把children()换成find()方法就好——find()会递归查找当前元素下的所有后代元素。为了精准定位表单控件(避免清空非输入类元素),可以用:input选择器,它能匹配所有表单输入元素(input、select、textarea等)。

修改后的完整JS代码

$('#intake_form').submit(function() {
    var showhideDivList = document.getElementsByClassName("showHide_div");
    // 避免页面没有show/hide div时出错
    if (showhideDivList.length > 0) {
        // 遍历每个show/hide div
        Array.from(showhideDivList).forEach(function (div) {
            console.log(div);
            // 如果当前div是隐藏状态
            if ($(div).is(":hidden")){
                // 替换children()为find(':input'),获取所有表单输入元素
                var elements = $(div).find(':input');
                console.log("elements.length:" + elements.length);
                for (var i = 0; i < elements.length; i++) {
                    var element = elements.eq(i);
                    console.log(element);
                    console.log("value", element.val());
                    element.val("");
                    console.log("value", element.val());
                }
            }
        });
    }
});

额外优化小提示

如果你只想清空Django表单渲染的输入字段(比如排除按钮类元素),可以把选择器写得更精准:

var elements = $(div).find('input, select, textarea');

这样只会匹配常见的表单输入控件,避免误操作其他元素。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 08:32:51