5

我知道 JQuery 有.on并且.live (deprecated)可以使用,但是那些假设您想要将事件处理程序附加到动态添加的元素的一个或多个事件,而我没有。我只需要引用它,这样我就可以访问它的一些属性。

更具体地说,有多个像这样的动态元素都带有class="cluster"set 并且每个都有不同的值:title 属性、top 属性和 left 属性。

这些 jquery 选项都不起作用:

var allClusters = $('.cluster');
var allClusters2 = $('#map').children('.cluster');
var allClusters3 = $('#map').find('.cluster');

同样,我不想附加任何事件处理程序,所以.on即使我要劫持它,添加一个虚假事件、一个 doNothing 处理程序,然后只引用我的属性,这似乎也不是正确的解决方案。
一定有更好的解决方案。有任何想法吗?

更新:
我错误地说明了标题,因为我的意思是元素是动态添加到 DOM 中的,但不是通过 JQuery。标题已更新。

4

2 回答 2

2

我想到了。元素没有显示,因为DOM 还没有更新

我正在使用 Google Maps 和MarkerClustererPlus来提供更多上下文,当我使用 markerclustererplus 添加地图标记时,它们在添加后的 javascript 代码中不可用。

向我的谷歌地图添加谷歌地图事件监听器解决了这个问题:

google.maps.event.addListener(myMarkerClusterer, 'clusteringend', function () {
    // access newly added DOM elements here
});

添加该侦听器后,上述所有 JQuery 选择器和/或方法都可以正常工作:

var allClusters = $('.cluster');
var allClusters3 = $('#map').find('.cluster');

虽然这个没有,但那是因为它只找到父母的直接后裔:

var allClusters2 = $('#map').children('.cluster');
于 2013-01-29T19:06:50.640 回答
1

在ajax回调中做你需要做的事情:

$.ajax(...).done(function (html) {
   //append here
   allClusters = $('.cluster');
});

如果您希望它们分开,您始终可以在事后绑定处理程序,或使用$.when

jqxhr = $.ajax(...).done(function (html) { /* append html */ });
jqxhr.done(function () { allClusters = $('.cluster') });
$.when(jqxhr).done(function () { /* you get it */ });

如果这些是在没有 ajax 更改的情况下附加的,那么只需将cluster-finding 代码移动到 DOM 更改发生的位置。

如果这不是一个选项,那么我想你只需要检查一个间隔。

于 2013-01-26T00:28:28.397 回答