我可以在jQuery中将数组推送到.load吗?

时间:2016-05-10 18:43:20

标签: jquery arrays load

所以这个第一个jQuery有效。它将另一个html页面的特定部分加载到#main_text的id。

$(function() {
  $('[id^="nav_"]').on("click", function() {
    var letter = this.id.split('_')[1];
    $("#main_text").load("page" + letter + ".html #main_text p,h2,h3,span #hidden");
  });
});

我现在想要将多个html文件加载到#main_text中。所以我试着把它们推入一个数组,然后.load那个数组。它不起作用。这甚至可能吗?

$(document).ready(function() {
    var array = [];
    array.push('page_mark1.html');
    array.push('page_mark2.html');
      $('#mark').on("click", function() {

        $("#main_text").load('array');
      });
});

1 个答案:

答案 0 :(得分:1)

load方法不接受网址数组。另请注意,如果要传递数组,则应将array而不是"array"(字符串)传递给函数。

您可以使用$.get功能代替load方法:

// create an array of deferred objects ( array of Ajax deferreds )
function getDef(urls) {
   return urls.map(function(url) { return $.get(url) });
}

// Pass the array to $.when
// the callback is called when all the requests are complete
$.when.apply($, getDef(array))
 .then(function() {
      // concatenate the strings based on the unknown length of arguments
      // `[].slice.call(arguments)` converts the special 
      // `arguments` object into a regular array
      var allContents = [].slice.call(arguments).join('');
      $("#main_text").html(allContents);
  });

您还可以定义jQuery函数:

$.fn.loadMany = function(urls) {
    var $this = this;
    urls = urls.map(function(url) { return $.get(url) });
    $.when.apply($, urls)
     .then(function() {
         $this.html([].slice.call(arguments));
     });
    return $this;
}

$("#main_text").loadMany(array);