2016-11-03 1 views
0

私はtheir APIに基づいていくつかのコードを自動生成するHighChartsライブラリ用のラッパーを持っています。このコードを自動生成するには、APIウェブサイトのHTMLをALL(再帰的)でエクスポートし、リンク(左側のメニューから)を展開する必要があります。これは、新しい拡張リンクが未だ拡張されていないリンクを有する場合があるので、再帰的に行わなければならない。すべてのonClickイベントが終了した後にのみ続行する方法は?

今私は手動でブラウザのJavaScriptコンソールからこのループを続行する必要があります。

  1. $('div.collapsed').find($('a.plus')).click();
  2. $('div.collapsed').find($('a.plus')).lengthを。ゼロの場合、私は完了です。ゼロでない場合は、1)を再度実行します。

私はこのように、次の自動化しようとした:

while ($('div.collapsed').find($('a.plus')).length !== 0) { 
    console.log('Doing a pass'); 
    $('div.collapsed').find($('a.plus')).click(); 
    console.log('Pass finished'); 
} 

をしかし、それは無限ループに行くと、それは動作しません。これはonClickがいくつかの非同期コード(おそらくAjax呼び出し?)を発生させるためだと思います。どのように私はそれを動作させることができますか?事前に

おかげで、

+0

あなたが「拡大」とはどういう意味ですか? – guest271314

+0

'a.plus'リンクをクリックするたびに、メニュー 'div.collapsed'に展開したメニューの内部リンクが表示されます。あなたは知っている...そのサイトの3つのドット。だから私はループする必要があります –

+0

@ pandeyvishal1986で提案されているように '.each()'を使ってみましたか? – guest271314

答えて

1

$('div.collapsed').find($('a.plus')).lengthので、それぞれの詳細については

$('div.collapsed').find('a.plus').each(function(){ 
//some code 
}) 

を使用してください値を変更するつもりはありません。 here

+0

ありがとうございます。しかし、私はどのようにループして非同期問題を解決することができますか?もちろん、私は '$( 'div.collapsed')を実行できます。find( 'a.plus')。each(function(){$(this).click();});'。しかし、それは、それ以上の 'a.plus'がなくなるまで何度も繰り返す必要があるという事実、そして 'クリック'が何か非同期をしている可能性があるという事実を解決するものではありません。 –

+0

javascriptの 'setInterval'関数を使って、特定の時間間隔でアクションを実行することができます。 [link](http://www.w3schools.com/jsref/met_win_setinterval.asp)を参照してください。 – RonyLoud

0

を確認してください、私は最終的にそれをこのように固定:

/* Technically we could simulate the click on the links, like this: 
$('div.collapsed').find($('a.plus')).click(); 
But that won't work as the clicks fire an async AJAX call so we don't know 
when to expand their children. To make the recursion to work, I found there are many useful functions 
in http://api.highcharts.com/resources/js/api.js 
The function toogleExpand() allow us to pass a callback. That way, on callback, we expand again with children 
making the recursion to work. */ 
function expandLinks(items) { 
    if (items.find('div[id$="-menu"]').length !== 0) { 
     items.find('div[id$="-menu"]').each(function(){ 
      var link = $(this); 
      toggleExpand(link.closest('.collapsed'), function() { 
      /* note that in this case we are making the recursion but only with the children of items */ 
      expandLinks(items.find('div.menuitem.collapsed')) 
     }); 
      }); 
    } else { 
    if($('div.collapsed').find($('a.plus')).length == 0) { 
     /* If there are no more links to open it means everything is ready so lets download the file */ 
     downloadDetailsDivContent(); 
    } 
    } 
} 
関連する問題