5

.onJQueryがあり、そこから利用できることは知ってい.live (deprecated)ますが、動的に追加された要素の1つ以上のイベントにイベントハンドラーをアタッチすることを前提としていますが、私はそうではありません。それを参照するだけで、その属性の一部にアクセスできます。

より具体的に言うと、このような複数の動的要素がすべてclass="cluster"セットであり、それぞれが異なる値 (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 マップとMarkerClustererPlusを使用してコンテキストを追加しています。markerclustererplus を使用してマップ マーカーを追加すると、追加後の JavaScript コードでは使用できませんでした。

Google マップ イベント リスナーを Google マップに追加すると、問題が解決しました。

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 に答える