如何在第2个可见的搜索结果后插入自定义DIV元素?
如何在第2个可见的搜索结果后插入自定义DIV元素?
嗨,我完全懂你的困扰——之前的代码绑定了特定ID的div,一旦搜索结果变多,固定找div5和div3的逻辑就失效了对吧?其实我们可以换个更灵活的思路:动态获取所有可见的搜索结果,直接定位到第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(); });
关键改动说明:
- 不再依赖固定ID:通过选择器批量获取所有搜索结果,再过滤可见项,不管结果有多少条,都能动态找到第2个可见结果。
- 无结果自动不执行:当
visibleResults.length为0时,插入逻辑会直接跳过,不会出现多余的div。 - 更灵活的适配性:如果你的搜索结果是用统一类名标记的,把选择器换成类名即可,比依赖ID更可靠。
另外补充一点:如果你的搜索结果是异步加载的(比如点击搜索按钮后才动态渲染结果),那只在DOMContentLoaded时执行一次addDivs()是不够的——你需要在搜索完成、结果渲染完毕后,再调用一次addDivs(),比如在搜索按钮的点击回调里,或者接口请求完成的回调里执行。
备注:内容来源于stack exchange,提问作者Kees




