针对您的问题,“在使用 AJAX 动态添加内容时,这是执行 jQuery 的正确方法吗?”我会说不,因为ajaxComplete 用于指定在任何 ajax 结果返回后会发生什么,所以如果您的页面上有任何其他 ajax 代码,或者如果您将来添加任何插件或任何也使用 ajax 的东西,那么ajaxComplete 代码也会为其他 ajax 调用运行。
典型的 ajax 调用看起来更像这样,在更新内容后在 done() 回调中添加代码。
$.ajax({
type: "GET",
url: "some.php",
dataType: "json"
})
.done(function(data) {
//example code to set content on the page
$('#someDiv').html( data.someHtml );
//your code
$(".leden li:nth-child(3n)").addClass('last');
});
回答您关于$ 不起作用的问题:
更新
由于您在评论中说 Ajax 调用发生在 document.ready 之前,ajaxComplete 内部的调用 document.ready 将发生得太晚。所以就用这个:
jQuery(document).ajaxComplete(function() {
jQuery(".leden li:nth-child(3n)").addClass('last');
});
这当然等同于:
jQuery(document).ajaxComplete(function() {
var $ = jQuery;
$(".leden li:nth-child(3n)").addClass('last');
});
...但是声明 $ 对于一行代码来说是多余的。
您可能在“无冲突”模式下加载了 jQuery。在此模式下,您可以使用一个方便的技巧使 $ 在 document.ready 中可用,这就是您正在使用的 - jQuery(document).ready(function($) { ...。但是你不能用ajaxComplete 做到这一点,此外,如果你把代码放在document.ready 回调中,你已经有$ 可用。我建议您像这样构建您的代码:
jQuery(document).ready(function($) {
$(document).ajaxComplete(function() {
$(".leden li:nth-child(3n)").addClass('last');
});
});
或者,如果您不需要在 document.ready 上运行其他代码,那么您可以像其他答案所建议的那样单独使用 ajaxComplete 函数。
更多详情:http://api.jquery.com/jquery.noconflict/