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

如何检测JavaScript函数est_wont_show是否已执行?

解决方案:跟踪函数执行状态 + 实现元素切换逻辑

咱们直接针对你的需求拆解解决,核心要搞定三个点:跟踪est_wont_show的执行状态、根据状态触发不同弹窗、实现元素"移除/恢复"的切换逻辑。下面一步步来:

1. 状态跟踪思路

可以用全局变量记录函数是否执行过,或者给目标元素加data-*自定义属性标记元素状态(更适合多元素场景)。两种方式都给你整理到代码里,按需选择。

2. 修复并完善est_wont_show函数

原代码只做了元素移除,缺少恢复逻辑,而且判断元素是否在DOM的写法有问题。修改后实现"存在则移除,不存在则恢复"的切换:

  • 移除时用detach()保存元素引用(保留事件和数据)
  • 恢复时把元素放回原来的位置

3. 实现TEST_ALERT函数

可以根据"函数是否执行过"或者"元素当前状态"来触发不同弹窗,两种判断逻辑都给你写好。

完整代码示例

// 全局变量:标记est_wont_show是否执行过(全局级跟踪)
let estWontShowExecuted = false;

function est_wont_show() {
    // 标记函数已执行
    estWontShowExecuted = true;

    const estpgt_id = $(this).attr("estpgt_id");
    const targetTr = $("#estpt_tr_for_" + estpgt_id);
    const targetElement = $("#estpgt_" + estpgt_id);

    // 用data属性判断元素是否已被移除(元素级状态跟踪)
    const isDetached = targetTr.data("detached") || false;

    if (!isDetached) {
        // 元素存在DOM中,执行移除
        const detachedTr = targetTr.detach();
        const detachedElem = targetElement.detach();
        
        // 保存元素原来的父节点和位置,方便后续恢复
        detachedTr.data("parent", targetTr.parent());
        detachedTr.data("nextSibling", targetTr.next());
        detachedElem.data("parent", targetElement.parent());
        detachedElem.data("nextSibling", targetElement.next());
        
        // 标记元素已移除
        detachedTr.data("detached", true);
        detachedElem.data("detached", true);
        alert("元素已从DOM移除");
    } else {
        // 元素已被移除,恢复到原位置
        const trParent = targetTr.data("parent");
        const trNext = targetTr.data("nextSibling");
        const elemParent = targetElement.data("parent");
        const elemNext = targetElement.data("nextSibling");

        // 按原位置插入元素
        trNext.length ? trNext.before(targetTr) : trParent.append(targetTr);
        elemNext.length ? elemNext.before(targetElement) : elemParent.append(targetElement);

        // 标记元素已恢复
        targetTr.data("detached", false);
        targetElement.data("detached", false);
        alert("元素已恢复到DOM中");
    }
}

function TEST_ALERT() {
    // 方式1:判断函数是否执行过
    if (estWontShowExecuted) {
        alert("est_wont_show已执行");
    } else {
        alert("est_wont_show尚未执行");
    }

    // 方式2:判断特定元素的状态(推荐多元素场景,需传入estpgt_id)
    // function TEST_ALERT(estpgt_id) {
    //     const isDetached = $("#estpt_tr_for_" + estpgt_id).data("detached") || false;
    //     isDetached ? alert("元素已被移除") : alert("元素在DOM中");
    // }
}

// 绑定按钮触发事件(假设按钮有class="toggle-btn")
$(".toggle-btn").on("click", est_wont_show);

关键细节说明

  • 状态判断修正:原代码document.body.getElementsByTagName(HideThis)写法错误,getElementsByTagName需要传入标签名(如div),不是元素对象,改用data-detached属性判断更可靠。
  • 元素恢复:detach()会保留元素的事件和数据,所以我们保存原父节点和兄弟元素,能精准恢复元素位置。
  • 灵活选择跟踪方式:全局变量适合单一场景,元素data属性适合多个元素独立切换的场景。

使用提示

  1. 触发按钮要带estpgt_id属性,比如:<button class="toggle-btn" estpgt_id="456">切换元素</button>
  2. 确保目标元素ID符合格式:estpgt_456和estpt_tr_for_456
  3. 调用TEST_ALERT()查看函数执行状态,多元素场景可以用注释里的带参数版本。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 04:17:20