jQuery-将加载事件附加到动态加载的元素
jQuery - Attaching load events to the dynamically loaded elements
我有一组元素,这些元素被加载并动态注入DOM。我有一个脚本,它需要完全加载元素才能正常工作。假设以下代码:
$(".element").width();
如果将其放入$(document).ready()
中,则可以正常工作。但我的场景有点不同,元素是动态加载到页面中的;因此,我需要$(".element")
上的加载事件,它本身是动态加载的。现在:
$(".element").load()
不起作用,因为默认情况下它没有加载到页面中,我使用了$("body").on("load", ".element", function(){...});
但无济于事,它仍然毫无作用。我现在该怎么办?
我的问题:我应该如何将加载事件绑定到动态创建的元素。
动态监听通过AJAX添加的特定元素
每当收到成功的AJAX响应时,就会触发ajaxSuccess
Docs
让我们使用它,看看是否有任何特定的选择器添加到DOM 中
jsBin示例
想象一下这个琐碎的HTML:
<button>Load something</button>
<div id="receiver"></div>
我们想在button
点击时将内容加载到#receiver
中:
$("button").on("click", function(){
$("#receiver").load("page.html");
});
首先是一些魔术:
// Elements load listener
var listenElementLoad = function(selector, callback) {
var $ex = $(selector);
$(document).ajaxSuccess(function(event, xhr, settings) {
var $html = $(xhr.responseText),
$ch = $html.find(selector),
$el = $html.is(selector) ? $html : $ch[0] ? $ch : null;
if($el) return callback( $(selector).not($ex) );
});
};
当一个所需的选择器(元素)被添加到我们的DOM时,下面的调用将在任何时候触发,并检索它:
// Listen for newly added class ".element"
listenElementLoad(".element", function( $el ) {
$el.css({color:"red"});
});
jsBin示例
即使它被弃用,请参阅DOMNodeInserted,您也可以使用此事件来检测新创建的元素:
window.onload = function() {
document.body.addEventListener("DOMNodeInserted", function (e) {
alert('New ele created: ' + e.target.outerHTML);
}, false);
document.getElementById('addNewElements').addEventListener('click', function(e) {
var lis = document.querySelectorAll('li');
var nextValue = +lis[lis.length - 1].textContent;
var node = document.createElement("LI");
var textnode = document.createTextNode(nextValue + 1);
node.appendChild(textnode);
document.querySelectorAll('ul')[0].appendChild(node);
});
}
<div>
<div>
<ul>
<li>1</li>
<li>2</li>
<li>3</li>
</ul>
</div>
</div>
<p>This is a paragraph</p>
<button id="addNewElements">Add new elements</button>
相关文章:
- UIWebview赢得't通过基本身份验证加载动态加载的资源(通过jQuery mobile)
- 我们可以加载动态角度对话框吗
- 使用JQuery在遗留html中加载动态AngularJS
- 谷歌地图在angularjs中懒惰加载动态地理坐标更新
- 正在加载动态日历以在一个月的正确日期开始
- 从服务器和/或客户端加载动态元素的典型技术是什么
- 如何加载动态更改的css文件
- jQuery 时间选取器未加载动态文本字段
- 如何在Highslide中加载动态生成的iframe
- 有没有办法避免角加载动态构建页面时的抖动效应
- 加载动态添加的输入字段
- 用于加载动态 JSON 数据的 JQuery 移动事件
- 手控表未加载动态创建的列标题
- 如何在 ag-grid 中从 http 调用加载动态列和行(列和记录都应该是动态的)
- Jquery 在 Firefox 中的自定义对象参数(动态导航加载动态内容)
- 延迟加载动态驱动器内容选项卡
- Angular JS ui-router - 加载动态视图和动态控制器
- 防止在引导选项卡中加载动态连续网络两次
- 使用 nodejs 加载动态 html
- 如何在 XSLT 中加载动态内容时创建函数