从个人函数加载文件后的jQuery addclass

时间:2014-02-17 13:54:01

标签: javascript jquery ajax addclass

我有一个加载文件的个人函数,我想在加载页面后改变一个类。

功能是

var _loadFile = function(filename, container, errorMessage) {
    $.ajax({
        url : filename,
        type: "GET",
        cache: false,
        dataType: "html",
        success : function (data) {
            $(container).html(data);
        }
    });
}

当我想使用它时,我做

_loadFile('assets/data/html/file.html', '#containerID', 'errorMessage');
$(idActive).addClass('active');

文件已加载但类未更改。因为我想要一个泛型函数,我不能在success()中改变类。

Thanx求助

2 个答案:

答案 0 :(得分:2)

您正在尝试修改尚未加载的元素的DOM(addClass)。请尝试这种方法:

var _loadFile = function(filename, container, errorMessage) {
    return $.ajax({
        url : filename,
        type: "GET",
        cache: false,
        dataType: "html",
        success : function (data) {
            $(container).html(data);
        }
    });
}

_loadFile('assets/data/html/file.html', '#containerID', 'errorMessage')
.then(function() {
    $(idActive).addClass('active');
});

$.ajax返回promise对象,并使用then方法。你也可以在成功回调中移动$(idActive).addClass('active');,但这并不好:我认为_loadFile是一个通用函数,我们不希望它除了加载数据之外还知道其他任何东西。

答案 1 :(得分:0)

如果通过AJAX加载元素“idActive”,则必须在success callback上添加该类:

var _loadFile = function(filename, container, errorMessage) {
    $.ajax({
        url : filename,
        type: "GET",
        cache: false,
        dataType: "html",
        success : function (data) {
            $(container).html(data);
            $(idActive).addClass('active');
        }
    });
}

假设已定义并生成idActive。否则添加

console.log($(idActive));

并查看控制台输出以确定,您要添加该类的元素确实存在。