为了确保在获取第一个 li 元素之前,页面完全渲染好,避免页面元素还未渲染完毕时就获取元素,您可以使用 setTimeout() 延迟执行代码,或者使用 MutationObserver 来观察 DOM 的变化,直到页面内容完全加载并渲染好后再执行操作。
方案1:使用 setTimeout() 延迟执行
这种方式是通过延迟执行代码来确保页面渲染完成。你可以尝试如下修改:
$(document).ready(function () {
// 使用setTimeout延迟执行,确保页面内容完全渲染
setTimeout(function () {
var firstLi = $('#list_records li').first(); // 获取第一个li元素
var shareCode = firstLi.data('code'); // 获取第一个li的shareCode
that.exerciseResultAnalysis(shareCode); // 传递shareCode进行分析
// 如果你还需要手动触发点击事件,使用trigger('click')
firstLi.trigger('click');
}, 100); // 100ms 延迟,可根据需要调整时间
});
方案2:使用 MutationObserver(更精确的解决方案)
如果页面的内容是动态加载的(比如通过 AJAX 请求或者动态渲染的组件),可以使用 MutationObserver 来观察 DOM 变化,确保在特定元素加载完成后再执行后续操作。
$(document).ready(function () {
// 创建MutationObserver来监控 DOM 变化
const observer = new MutationObserver(function (mutations) {
// 检查 #list_records 是否渲染完毕
if ($('#list_records li').length > 0) {
// 页面中至少有一个 li 元素,开始执行操作
var firstLi = $('#list_records li').first(); // 获取第一个li元素
var shareCode = firstLi.data('code'); // 获取第一个li的shareCode
that.exerciseResultAnalysis(shareCode); // 传递shareCode进行分析
// 如果你还需要手动触发点击事件,使用trigger('click')
firstLi.trigger('click');
// 停止观察
observer.disconnect();
}
});
// 配置观察选项
const config = {
childList: true, // 观察子元素的变化
subtree: true // 观察整个子树
};
// 启动观察,观察整个document.body
observer.observe(document.body, config);
});
解释:
1.setTimeout() 延迟执行:延迟 100 毫秒执行,等待 DOM 渲染完成。可以根据需要调整延迟时间。
2.MutationObserver:通过监听 DOM 变化,确保 #list_records 元素中的 li 渲染完成后再执行后续操作。这个方法适用于动态加载内容的场景。
选择哪个方法取决于你的具体需求。如果页面内容是动态加载的,使用 MutationObserver 更加精确;如果只是简单的渲染延迟,使用 setTimeout() 延迟执行即可。