如何在没有事件的情况下选择DOM之外的元素?

时间:2018-06-28 17:45:10

标签: javascript jquery dom jquery-selectors

我需要执行:

$('.btn-toolbar').toolbar({
    content: '#toolbar-options'
});

具有.btn-toolbar类的元素不在 DOM 中,因为它们是在和ajax请求之后添加的。 如何选择DOM之外的元素?

在另一个类似的问题中,它可以用Delegate Event解决,但是我没有任何可管理的事件,不需要启用单击,悬停或任何其他事件。我只想对btn-toolbar的所有元素执行工具栏功能,但是$('.btn-toolbar')目前为空。

2 个答案:

答案 0 :(得分:1)

在将.btn-toolbar类的元素放入DOM之后,您可以在ajax调用成功/完成上执行代码。

$.ajax({
....
}).done(function() {
  // Places/Inserts the .btn-toolbar elements in the page.
  $('.btn-toolbar').toolbar({
    content: '#toolbar-options'
  });
});

如果ajax调用是由其他脚本发出的,而您无法注入(例如-由其他插件的缩小脚本,或者该脚本来自其他站点)来注入您的代码,那么您仍然可以干扰ajax调用并附加您的要运行的代码。 您可以使用jQuery.ajaxSetup()自定义在网站中进行的ajax调用。

例如,只要通过以下方式成功完成ajax调用,您就可以运行代码:

$( document ).ajaxSuccess(function() {
  $('.btn-toolbar').toolbar({
    content: '#toolbar-options'
  });
});

答案 1 :(得分:0)

如果一个元素不在任何元素子树中(即,不是任何其他元素的子元素),并且您没有持有对该元素的引用(其他任何对象也都没有引用它),则该元素实际上已经消失了,并且受制于垃圾收集。

如果您持有引用,则需要使用该引用。如果它是某个其他元素的子元素( 元素是否在DOM树中),则需要在选择中包括该父元素,这意味着您至少需要一个引用到该父元素。否则,您实际上并没有其他途径。

如果该元素实际上还不存在,而您只是在说“在加载到页面中时在任何.btn-toolbar上调用此命令”,那么您需要一个突变观察者。