在jquery中创建函数

时间:2014-12-11 09:28:55

标签: jquery ajax

阅读this question后,我发现答案已过时/贬值,因此我在问是否有人会更新任何内容。答案:

JQuery是否具有类似

的函数调用
$('#myNewDivId').on('create', function(){

});

单个div,或多个'追加':

$('.myNewDivWithClass').on('create', function(){

});

是否为动态创建的div?

  • 我宁愿包含插件(特别是'过时'像.livequery()插件)
  • ' DOMSubtreeModified'似乎有折旧,那么还有其他选择吗?
  • 我需要此功能与(至少)IE 10 + 11兼容。

我要做的就是创建这个新元素',就是将ajax回拨给我的控制器以“替换”#39;这个div有局部视图吗?但是,如果没有使用jquery方法,它似乎比预期更困难

1 个答案:

答案 0 :(得分:2)

没有神奇的浏览器解决方案适用于所有旧浏览器,尽管有一些使用浏览器特定功能的解决方法,但是,如果您可以控制新的浏览器创建元素,只需在添加后在该新元素(或其容器)上广播自定义事件。

e.g。

var newDiv = $('<div>', {id: myNewDivId});
$('#somewhere').append(newDiv);
newDiv.trigger('myname.loaded');      // trigger event on new element

并在主JS中听取事件:

$(document).on('myname.loaded', function(e){
    // e.target is the element added
    $(e.target).css('color', 'red');
});

JSFiddle: http://jsfiddle.net/TrueBlueAussie/epg09n4d/3/

下面建议您将此附加功能包装在一个函数中,但假设您始终使用append添加元素。相反,您可以使用jQuery扩展方法:

e.g。向jQuery添加modified方法

jQuery.fn.modified = function () {
    this.trigger('myname.loaded');
    return this;
};

并调用父容器(而不是元素):

$('#somewhere').append(newDiv).modified();

JSFiddle: http://jsfiddle.net/TrueBlueAussie/epg09n4d/7/

注意:定位容器(不是添加的元素)似乎更有用,并且与我们用于面板Ajax更新的模式相匹配。