【问题标题】:On create function in jquery在jQuery中创建函数
【发布时间】:2014-12-11 09:28:55
【问题描述】:

阅读this question 后,我发现答案已过时/贬值,因此我询问是否有人对以下问题有任何“更新”的答案:

JQuery 有没有类似的函数调用

$('#myNewDivId').on('create', function(){

});

对于单个 div,或多个“附加”:

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

});

对于动态创建的 div?

  • 我宁愿包含插件(尤其是“过时”的插件,例如 .livequery() 插件)
  • “DOMSubtreeModified”好像已经贬值了,有没有替代方案?
  • 我需要此函数与(至少)IE 10 + 11 兼容。

我要做的是创建这个“新元素”,是让一个 ajax 回调到我的控制器以用部分视图“替换”这个 div?但是,没有jquery方法可以使用,似乎比想象的要难

【问题讨论】:

  • @BarthZalewski:但这些答案已经过时了? since DOMSubtreeModified seems to be depreciated?
  • 只是一些想法:我们的内部解决方案是通过单个插件发送所有 Ajax 交互,该插件在所有 Ajax 调用之后广播 namehere.load 事件,将新内容传递到其中的元素已加载。然后,单个顶级处理程序根据加载的面板中的类连接任何所需的代码/插件。它确实需要对 ajax 进行单次否决替换,但简化了我们所有的项目。从理论上讲,您可以使用此功能包装实际的 jQuery $.ajax 函数,但我对 jQuery 源的了解还不够,无法尝试这样做。
  • ...所以对于您更简单的“我想知道 DIV X 何时创建”问题,您是否可以在插入元素时简单地 trigger 自定义事件?
  • 在下方添加了自定义触发事件的示例。希望它有所帮助:)

标签: jquery ajax


【解决方案1】:

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

例如

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 扩展方法:

例如为 jQuery 添加一个modified 方法

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

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

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

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

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

【讨论】:

  • original version 好多了:) 顺便提一下:如果这个逻辑 (append + trigger) 将用于许多地方和许多元素,那么这是一个好主意在单独的函数中移动它(类似于function appendElement(jContainer, jElement) { jContainer.append(jElement); jElement.trigger('myname.loaded'); }
  • TrueBlueAussie:感谢您的解释。我目前正在尝试来实现它,并会看看我是否可以让它在我的项目中工作。干杯。
  • @jbutler483:为您添加了更简单的更新。清洁一点。 “修改”似乎和任何名字一样好。 :)
  • @Regent:粗鲁地指出我早期废弃的实验:) 他们可能会使用多种方法向 DOM 添加元素,因此建议使用modified() jQuery 扩展方法或类似方法来满足这一点。
  • @Regent:请阅读答案末尾的注释。在实践中最好从容器通知,并让顶级代码在其中进行选择,但这确实取决于要求。 :)
猜你喜欢
  • 1970-01-01
  • 2012-01-05
  • 2011-04-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-08-11
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多