该网站使用 Prototype JS 库。
页面加载后,它立即执行 Ajax 请求,该请求会拉出并显示页面的更多元素。
我需要能够选择那些动态创建的元素并将它们隐藏.hide()
method.
我尝试使用选择并隐藏它们document.observe('dom:loaded', function() { $('my-new-dynamic-element').hide(); })
,但是这段代码没有“看到”动态元素。
我看到原型有.on()方法,但我不确定在我的情况下应该指定哪个事件?我尝试了事件“加载”,但没有成功。
我将不胜感激任何关于如何解决这个问题的提示。
UPDATE:我需要在 Magento CMS 后端完成此任务,所以我不能,或者更好 - 我不想修改原始的 Magento javascript 代码和 ajax 请求 HTML 输出。因此,我需要通过添加额外的自定义 Javascript 代码来完成此任务,该代码在动态发布的元素上使用 PrototypeJS 选择器。它们需要被隐藏起来,并且永远不会再次出现。我希望有一个简单的几行解决方案。
PS:我试图隐藏 Magento 管理 ->“创建新订单”页面中的一些地址元素,其中所有客户联系数据都是在加载主页后通过 ajax 请求提取的。但我认为这些信息对于问题描述并不重要。
如果您打算稍后再次显示它们,您可以将 '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');
});
这是一个相当广泛的选择器,您可以使用 next 和 previous 或 id 选择器来执行更具体的操作。 on() 方法的要点是,在事件发生之前不会评估其闭包的内容,因此您可以依赖评估时找到的与选择器匹配的所有内容,无论它是在页面加载时存在还是已添加之后。
如果您只想隐藏添加到页面的内容,并且想要一个完全不可知的方法,您可以尝试以下方法:
document.on('DOMSubtreeModified', function(evt){
$$('.some-selector-here').each(function(elm){
if(elm.visible()) elm.hide();
});
});
每次修改页面时都会触发该操作,因此您可以测试并隐藏添加的内容(如果它们与您的内部选择器匹配)。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)