关于将未来的操作绑定到不存在的元素上 ,有很多问题最终都以现场 /代表来回答。 我想知道如何运行一个任意的callback(例如添加一个类或触发一个插件)到所有匹配select器的现有元素,以及所有未来的元素匹配相同的select器尚未创build。 看起来,livequery插件的主要function使它成为核心,但另一方面,随意的callback在某种程度上迷失了方向。 另一个常见的答案是事件委托,但如果没有访问所有的供应商代码来创build元素来触发事件呢? 这是一些真实世界的代码: // 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'); }); […]
有没有在JQuery或香草JavaScript中的跨浏览器的任何DOM突变事件? 为了澄清,说我在我的网页上插入一个div的脚本。 我没有访问脚本,我不知道什么时候插入div。 我想知道是否有一个DOM突变事件,我可以添加一个监听器,知道什么时候插入一个元素。 我知道我可以使用一个计时器来定期检查插入,但是,我不太喜欢这会施加的开销。
由于DOM突变被W3C标记为废弃(见http://www.w3.org/TR/DOM-Level-3-Events/#events-mutationevents ),是否有一种(快速)替代方法来检测属性修改在DOM中?
除了使用计时器计算随时间变化的元素数量并寻找变化之外,我想不出一个更好的方法来模拟这个事件。 是否有某种专有的IE版本的DOMNodeInserted? 谢谢。
我需要一个有效的机制来检测DOM的变化。 最好是跨浏览器,但如果有任何不是跨浏览器的有效手段,我可以实现这些与一个故障安全跨浏览器方法。 特别是,我需要检测会影响页面文本的更改,因此需要任何新的,删除或修改的元素,或者更改内部文本(innerHTML)。 我无法控制所做的更改(可能是由于第三方JavaScript包含等),所以无法从这个angular度来处理 – 我需要以某种方式“监视”更改。 目前我已经实现了一个“quick'n'dirty”方法, body.innerHTML.length隔一段时间检查body.innerHTML.length 。 这当然不会检测到导致返回相同长度的变化,但是在这种情况下“足够好” – 发生这种情况的可能性非常小,在这个项目中,不能检测到变化在丢失的数据。 body.innerHTML.length的问题是它很昂贵。 在一个快速的浏览器上,它可能需要1到5毫秒,这可能会让事情变得非常糟糕 – 我也在处理大量的iframe,这些都会加起来。 我很确定这样做的代价很大,因为innerHTML文本不是由浏览器静态存储的,每次读取时都需要从DOM中计算出来。 我正在寻找的答案的types是从“精确的”(例如事件)到“足够好”的任何东西 – 可能是innerHTML.length方法的“quick'n'dirty”,但执行速度更快。 编辑:我也应该指出,尽pipe检测已被修改的精确元素是“好的”,但这不是绝对必要的 – 只是事实上已经有任何改变就足够了。 希望这能扩大人们的反应。 我要去调查突变事件,但是我仍然需要IE支持的回退,所以任何有创意的,不寻常的想法都是非常受欢迎的。
当一些div或input被添加到html时,我想执行一个函数。 这可能吗? 例如,添加一个文本input,然后调用该函数。