Ajax PrototypeJS:如何选择动态创建的元素?

Ajax PrototypeJS:如何选择动态创建的元素?,ajax,dynamic,prototypejs,Ajax,Dynamic,Prototypejs,该网站正在使用Prototype JS库 页面加载后,它立即执行Ajax请求,该请求将拉出并显示页面的更多元素 我需要能够选择那些动态创建的元素,并使用.hide方法隐藏它们 我尝试使用document.observe'dom:loaded',function{$'my-new-dynamic-element.hide;}选择并隐藏它们,但是这段代码没有“看到”动态元素 我看到Prototype有方法,但我不确定在我的案例中应该指定哪个事件?我尝试了事件“加载”,但没有成功 如果您能告诉我如何解

该网站正在使用Prototype JS库

页面加载后,它立即执行Ajax请求,该请求将拉出并显示页面的更多元素

我需要能够选择那些动态创建的元素,并使用.hide方法隐藏它们

我尝试使用document.observe'dom:loaded',function{$'my-new-dynamic-element.hide;}选择并隐藏它们,但是这段代码没有“看到”动态元素

我看到Prototype有方法,但我不确定在我的案例中应该指定哪个事件?我尝试了事件“加载”,但没有成功

如果您能告诉我如何解决这个问题,我将不胜感激

更新:我需要在Magento CMS后端完成这项工作,所以我不能,或者更好——我不想修改原始Magento javascript代码和ajax请求HTML输出。因此,我需要通过添加额外的自定义Javascript代码来实现这一点,该代码在动态发布的元素上使用PrototypeJS选择器。它们需要隐藏起来,永远不要再出现。我希望有一个简单的两行解决方案

PS:我试图在Magento Admin->Create New Order页面中隐藏一些地址元素,在主页加载后,所有客户联系数据都会通过ajax请求提取。但是我认为这些信息对于问题描述并不重要。

我将在Ajax请求成功回调中执行.hide。如果要动态创建元素,则可以在将元素插入DOM之前对其进行操作

比如说

new Ajax.Request('/myurl',{'onSuccess':function(result){
    var t = new Element('div').update(result.responseText).hide();

    $$('body')[0].insert(t);

});
或者更复杂,如果您只想在html的blob中隐藏特定元素。首先需要将blob放入扩展元素中。这将在blob中隐藏地址类为decedent的所有元素,而不是整个DOM

new Ajax.Request('/myurl',{'onSuccess':function(result){
    var t = new Element('div').update(result.responseText);

    t.select('input.address').invoke('hide');

    $$('body')[0].insert(t.innerHTML);

});

如果您计划稍后再次显示它们,您可以将“style=display:none”添加到创建HTML的内容中,换句话说,您将在/myurl后面插入函数,然后您可以稍后在延迟的侦听器中显示这些元素,例如由on方法创建的元素

// /myurl => '<input type="text" class="foo" style="display:none">'

// later, in the combined page
document.on('click', '.some-control', function(evt, elm){
  evt.stop();
  $$('.foo').invoke('show');
});

这将在每次修改页面时触发,因此,如果添加的内容与内部选择器匹配,则可以在添加时测试和隐藏这些内容。

我无法修改ajax回调函数。我需要一个单独的javascript PrototypeJS代码。我已经更新了我的问题。我无法修改页面上发布的HTML。我不希望以后再显示这些元素。我想使用javascript代码实现这一点,该代码独立于页面ajax调用上加载的当前javascript,etcI接受了答案,因为“DOMSubtreeModified”事件是我问题的答案。然而,书中写着:警告!本规范中定义了DOMSubtreeModified事件类型以供参考和完整性,但本规范不推荐使用此事件类型@沃尔特-你能对此发表评论吗?它已被弃用,但在所有主流浏览器中仍然受支持。我每次使用Firefox都会抱怨,但仍然接受。管理此计时器还有其他方法,但建议使用MutationObserver:
document.on('DOMSubtreeModified', function(evt){
  $$('.some-selector-here').each(function(elm){
    if(elm.visible()) elm.hide();
  });
});