每次添加具有指定选择器的元素时执行 JS 函数
Execute JS function each time element with specified selector is added
我必须用复杂的UI重构大型单页应用程序。
document.ready 函数中有以下代码
$('table.datatable').dataTable({ ... params ... });
$('div.tooltip').tooltip({ ... params ... });
$('ul.dropdownMenu').menu({ ... params ... });
正如你在这个代码中看到的,我们搜索不同的HTML控件,并调用实现这些控件行为的适当jQuery插件。
但是,由于页面是非常动态的,因此一直在添加新的数据表,工具提示和菜单,并且由于JS函数是在应用程序一开始就调用的 - 除非我手动为它们调用适当的插件,否则这些元素没有所需的功能。
我想消除在每次 DOM 更改后调用 jQuery 插件的需要,但不知道如何做得更好。
一种选择是每次向 DOM 添加任何内容时触发一个事件,并在事件的侦听器中重新调用此插件,但是我不喜欢这个解决方案,因为每次都需要记住触发事件。
我阅读了有关jQuery的on
函数,该函数也为尚不存在的元素附加事件,但是我需要什么事件?AFAIK没有改变事件。
有什么建议吗?
您唯一的选择是在将插件添加到 DOM 后将插件挂接到新项目上。 最好的跨浏览器选项是挂接到将这些类型的元素添加到 DOM 的每个位置,并通过对它们调用一些附加函数来简单地处理那里的新项目。 您需要寻找的是,在将新元素添加到 DOM 后,您可以轻松地挂接到现有代码,然后在那时修复这些新元素。 如果不了解您的代码以及 DOM 的修改位置,我们就无法真正建议最佳方法。
通常,使用单一方法监视 DOM 中的新项是不可能的跨浏览器方式。 突变观察器是执行此操作的最新标准方法,但许多浏览器尚不支持它。 突变事件先于突变观察者出现,但现在已被弃用。
jQuery的.on()
不会在这里做你想要的 - 它可以用来处理动态添加的DOM元素,但不能以你想要的方式。 您的插件本可以设计为使用 .on()
来处理其事件,但除非它们是这样设计的并且您可以利用这一点,否则没有一种简单的方法可以让您使用它来获得所需的行为而无需重写插件的一部分。
- 使用html 5对元素执行自定义表单验证功能
- 对未知数量的元素执行Jquery循环
- jQuery没有为具有新id的新元素执行代码
- Javascript - 在创建时对数组元素执行操作
- jQuery :对页面上的每个元素执行相同的操作
- 单击对内部元素执行某些操作
- 循环遍历 json 子对象并对每个“元素”执行某些操作
- Javascript 数组映射“出现”以对缺少的元素执行回调
- 无法对动态创建的 html 元素执行单击事件
- 使用 IF 运算符对给定数组中的字母数字和非字母数字元素执行不同的操作
- 为每个包含类的元素执行 jQuery 函数
- 对多个元素执行回调函数
- 即使在类名上触发了click事件,也要对特定元素执行某些操作
- SharePoint<按钮>元素执行页面的不需要的重新加载
- 无法对五个画布元素执行相同的效果
- 如何基于URL对聚合物元素执行select()方法
- 浏览器是否对屏幕元素执行相应的Javascript选择
- 侦听.on()中的shift键,然后使用附加侦听器的元素执行一个函数
- 如何使用JavaScript延迟为数组中的每个元素执行的函数
- 如何使某个javascript函数在页面加载时对其所有元素执行