1

私は、1つのことを除いて正常に動作する次の機能を持っています。それが最初に追加するものには何の影響もありません。

(function biograf(){
  var placeholder = $('#top-imageholder');
  $('ul#biomenu > li').each(function(){
    var obj = $(this);
    var pageLink = obj.find('a:first').attr('href');
    $.get(pageLink, function(data) {
      placeholder.append( $(data).find('#top-imageholder').html() );
      placeholder.append( $(data).find('#top-imageholder').siblings('ul') );
    });
  });
})();

リスト項目が #biomenu に配置される順序でプレースホルダーを追加する関数が必要です。

これは 90% の確率で実行されますが、たまに異なる順序で追加されます。

助言がありますか?

4

2 に答える 2

2

次のコードで動作するようになりました。

(function biograf(){
  var placeholder = $('#top-imageholder');
  var item = $('ul#biomenu > li');
  var index = 0;

  (function loop(){
    setTimeout(function(){
      var pageLink = item.eq(index).find('a:first').attr('href');
      if( pageLink != undefined ){
        $.get(pageLink, function(data) {
          placeholder.append( $(data).find('#top-imageholder').html() );
          placeholder.append( $(data).find('#top-imageholder').siblings('ul') );
        });     
        index++;
        loop();
      }
    });
  })();
})();

これが最適な方法なのか、それともコードをtweekedできるのかはわかりません。しかし、それは機能します!:)

しかし、すべての返信をありがとう!

于 2013-01-23T14:46:07.497 に答える
0

注文結果$.when(テストされていないコード):

(function (){

  var placeholder = $('#top-imageholder');
  var promises = [];

  $('ul#biomenu > li').each(function(){
    var obj = $(this);
    var pageLink = obj.find('a:first').attr('href');
    promises.push($.get(pageLink));
  });

  $.when.apply(null, promises).done(function() {
    $.each(arguments, function(data) {
      placeholder.append( $(data).find('#top-imageholder').html() );
      placeholder.append( $(data).find('#top-imageholder').siblings('ul') );
      return true;
    });
  });

})();
于 2013-06-02T13:02:20.430 に答える