2016-07-16 17 views
0

私は、個別にダウンロードするファイルのリンクが多いページがあります。 1回のクリックですべてのファイルをダウンロードする機能があると良いと思った。ここに私がこれをテストするために書いたスクリプトがあります。jQueryを使用してページ上に複数のファイルをダウンロード

$('tbody tr a').slice(1).each(function(){ //don't mind the slice(). 
    console.log('starting download of: ' + $(this).attr('href')); // for debugging. 
    $(this).attr('target','_blank'); // so that a new page is opened for download. 
    window.location.href = $(this).attr('href'); 
}) 

問題は、スクリプトは最初のダウンロードリンクのみのダウンロードを誘発することです。しかし、コンソールが表示された場合は、すべてのファイルに対してログが出力されます。私はそれがページのリダイレクトのために起きていると思います。誰も私がこれを回避するのを助けることができますか?

+0

をクリックするだけで.each()で濾過セレクタ$("tbody tr a").slice(1)内の各<a>要素に.click()を呼び出すことは、 '$(この).clickを(い、window.location.href = $(this).attr('href')ためdownload属性を代入してみ) '仕事? – afuous

+0

ボタンをクリックするとスクリプトを動的に取り込めますか? –

+0

@afuousいいえ、私はそれを試みました。これは、コンソールにすべてのファイルを記録するだけですが、ダウンロードを開始しません。 – Abhishek

答えて

2

<button>要素

var a = $("tbody tr a").slice(1); 
 

 
$("button").click(function(e) { 
 
    // download `a.txt`, `b.txt` 
 
    a.each(function() { 
 
    this.click() 
 
    }) 
 
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<table> 
 
    <tbody> 
 
    <tr> 
 
     <td> 
 
     <a href="data:text/plain,1" download="1.txt">1</a> 
 
     </td> 
 
    </tr> 
 
    <tr> 
 
     <td> 
 
     <a href="data:text/plain,a" download="a.txt">a</a> 
 
     </td> 
 
    </tr> 
 
    <tr> 
 
     <td> 
 
     <a href="data:text/plain,b" download="b.txt">b</a> 
 
     </td> 
 
    </tr> 
 
    </tbody> 
 
    <!-- click to download `a.txt`, `b.txt` --> 
 
    <button>download all files</button>

+0

このページにはリンク上で定義された 'download'属性はありません。だから私はiteratingと '$(this).attr( 'target'、 '_ blank')attr( 'download'、filename);'を繰り返して追加しました。しかし、この後でさえ '.click()'はファイルのダウンロードを開始しません。 – Abhishek

+0

stacksnippetsで 'js'を試しましたか?あなたは '$(this).attr( 'target'、 '_ blank')にチェーンされた' .click() 'を呼び出しましたか?attr( 'download'、filename)'? jQueryオブジェクトの代わりに 'DOM'要素に' this.click() 'を呼び出すことを試みてください。 – guest271314

+0

ありがとう! 2番目の 'this.click()'が動作します。しかし、これはどういう意味ですか? – Abhishek

0

あなたはここにこの答えを見てみたいことがあります。

jquery trigger ctrl + click

ちょうどあなたのリンクやトリガCTRLのすべての上で実行+新しいページ内のリンクを開くためにクリックしてください。

+0

私はすでに 'target = '_ blank'を追加しました。これは本質的に** ctrl + ** ** – Abhishek

+0

@Abhishekのwindow.locationとトリガctrl + clickを同じように表示します同じ。 –

関連する問題