关于将未来的操作绑定到不存在的元素上存在很多问题,这些元素最终都以live/delegate回答.我想知道如何运行任意回调(例如,添加类或触发插件)到匹配选择器的所有现有元素以及与尚未创建的相同选择器匹配的所有未来元素.
似乎livequery插件的主要功能使其成为核心,但另一部分,附加任意回调在某种程度上丢失了.
另一个常见的答案是事件委派,但是如果一个人无法访问创建元素以触发事件的所有供应商代码,该怎么办?
这是一些现实世界的代码:
// with livequery
$('input[type=text], input[type=password], textarea, .basic_form .block select, .order_form .form_item select, .order_form .form_item input')
.livequery(function(){
$(this)
.focus(function(){
$(this).addClass('active');
})
.blur(function(){
$(this).removeClass('active');
})
.addClass('text');
});
// with live
$('input[type=text], input[type=password], textarea, .basic_form .block select, .order_form .form_item select, .order_form .form_item input')
.live('focus', function(){
$(this).addClass('active');
})
.live('blur', function(){
$(this).removeClass('active');
});
// now how to add the class to future …Run Code Online (Sandbox Code Playgroud) 根据规范,只有BODY和FRAMESET元素提供了一个"onload"事件来附加,但我想知道什么时候动态创建的DOM元素已经添加到JavaScript中的DOM.
我目前正在使用的超级天真的启发式方法如下:
我所追求的是确认我正在做的事情是足够的(再次,它在IE7和FF3中工作)或更好的解决方案,无论出于何种原因,我完全忘记了; 也许我应该检查其他属性等.
编辑:我想要一个与浏览器无关的方法,不幸的是,我并不住在一个浏览器的世界里; 也就是说,浏览器特定的信息是值得赞赏的,但是请注意哪个浏览器知道它确实有效.谢谢!
除了使用计时器来计算一段时间内的元素数量并寻找变化之外,我想不出更好的方法来模拟这个事件.
是否有某种专有的IE版DOMNodeInserted?谢谢.
当然这个问题很简单,但我无法弄清楚这一点.
我正在使用DOMNodeInserted事件来检测何时插入新元素.
我不知道如何使用当前元素,例如获取它的父ID.
现在我有这样的功能:
document.addEventListener("DOMNodeInserted", function(event){
var element = event.target;
if (element.tagName == 'DIV') {
if (element.id == 'ndiv_3-1VTSTHR') {
alert($('#ndiv_3-1VTSTHR').parent().get(0).tagName);
}
}
});
Run Code Online (Sandbox Code Playgroud)
这有效,但它会给我ndiv_3-1VTSTHR元素的父级.我想知道使用JQuery的任何元素的父级.
我试过了
alert($(this).parent().get(0).tagName);
Run Code Online (Sandbox Code Playgroud)
但没有运气.