You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何在第2个可见的搜索结果后插入自定义DIV元素?

如何在第2个可见的搜索结果后插入自定义DIV元素?

嗨,我完全懂你的困扰——之前的代码绑定了特定ID的div,一旦搜索结果变多,固定找div5div3的逻辑就失效了对吧?其实我们可以换个更灵活的思路:动态获取所有可见的搜索结果,直接定位到第2个结果后面插入元素,这样不管结果有多少条,都能精准满足你的需求,而且没有搜索结果时也不会显示多余的div。

下面是修改后的代码,我会逐部分给你解释:

function addDivs() {
    // 复用你之前的可见性判断函数
    function isVisible(element) {
        return element.offsetParent !== null;
    }

    // 获取所有搜索结果元素:这里假设你的结果div的ID都是以"outcome"开头的
    // 如果这些结果div有统一的类名(比如"search-result"),换成document.querySelectorAll('.search-result')会更稳妥
    const allResults = document.querySelectorAll('[id^="outcome"]');
    // 把NodeList转成数组,再过滤出可见的结果
    const visibleResults = Array.from(allResults).filter(isVisible);

    // 只有当可见结果至少有2个时,才执行插入操作
    if (visibleResults.length >= 2) {
        // 取第2个可见结果(数组索引从0开始,所以是[1])
        const secondVisibleResult = visibleResults[1];

        // 创建第一个自定义div并插入
        const divAbc = document.createElement("div");
        divAbc.className = "bbbbb";
        divAbc.textContent = "abc";
        secondVisibleResult.insertAdjacentElement("afterend", divAbc);

        // 创建第二个自定义div并插入
        const divXyz = document.createElement("div");
        divXyz.className = "ccccc";
        divXyz.textContent = "xyz";
        secondVisibleResult.insertAdjacentElement("afterend", divXyz);
    }
}

// 页面加载完成后执行一次
document.addEventListener("DOMContentLoaded", function() {
   addDivs();
});

关键改动说明:

  1. 不再依赖固定ID:通过选择器批量获取所有搜索结果,再过滤可见项,不管结果有多少条,都能动态找到第2个可见结果。
  2. 无结果自动不执行:当visibleResults.length为0时,插入逻辑会直接跳过,不会出现多余的div。
  3. 更灵活的适配性:如果你的搜索结果是用统一类名标记的,把选择器换成类名即可,比依赖ID更可靠。

另外补充一点:如果你的搜索结果是异步加载的(比如点击搜索按钮后才动态渲染结果),那只在DOMContentLoaded时执行一次addDivs()是不够的——你需要在搜索完成、结果渲染完毕后,再调用一次addDivs(),比如在搜索按钮的点击回调里,或者接口请求完成的回调里执行。

备注:内容来源于stack exchange,提问作者Kees

火山引擎 最新活动