【发布时间】:2026-02-09 21:05:02
【问题描述】:
我了解当通过 AJAX 加载 DOM 内容时 jQuery 将不会运行。但我对其中的原因感到困惑。我的理解是,在 jQuery 启动时 DOM 元素不存在,因此它不会找到正确的 ID 或类。
但我有一种情况,即仅在通过 AJAX 加载所有内容之后才调用 jQuery。但是还是不行。
这是我的代码。我试图让函数decorateGains() 在 AJAX 完成后运行。
loadData('7-days'); // Runs the default AJAX for 7 days
function loadData(type){
var xmlhttp;
if (window.XMLHttpRequest){xmlhttp=new XMLHttpRequest();}
else{xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");}
xmlhttp.onreadystatechange=function()
{
if (xmlhttp.readyState==4 && xmlhttp.status==200){document.getElementById("home-table").innerHTML=xmlhttp.responseText;}
}
xmlhttp.open("GET","actions/get-data-"+type+".php",true);
xmlhttp.send();
decorateGains();
}
您可以看到我在 loadData() 函数的末尾包含了对函数 decorateGains() 的调用。
decorateGains() 函数确实运行,因为我可以看到我的控制台消息。然而,它并没有完成它应该完成的任务。
function decorateGains() {
console.log('here');
$(".gains").each(function() {
var num = +($(this).text());
if (num > 0) {
console.log('here');
$(this).addClass("positive");
}
if (num < 0) {
console.log('here');
$(this).addClass("negative");
}
});
}
(该脚本搜索类为.gains的所有元素,并根据元素的内容添加一个新的positive或negative类。本质上它将.gains元素装饰为红色或绿色取决于数字是负数还是正数)。
【问题讨论】:
-
您的问题是,ajax 是异步的。所以,
DecorateGains();在响应到达之前运行。
标签: javascript jquery ajax dom