繁体   English   中英

jQuery AJAX .each()没有停止

[英]jQuery AJAX .each() not stopping

不知道标题是否有意义,但这是我的问题。

我目前使用Dropbox共享家庭照片,试图根据它们的内容将它们全部放入自己的DIV中的HTML页面中。

我通过一个看起来像这样的JSON文件加载它们

[
    {
        "Birthday": "10"
    },
    {
        "Camping": "20"
    },
    {
        "July Fourth": "50"
    }
]

并使用jQuery .ajax加载它们

$(document).ready(function () {
  $.ajax({
    url: 'events.json',
    success: function(response) {
      $.each(response, function() {
        $.each(this, function(name, photos) {
          $('#container').append('<div class="gallery" name="' + name + '"></div>');
          $('div[name="' + name + '"').append(function() {
            for ( var i = 1; i <= photos; i++) {
              if (i < 10) {
                $('.gallery').append('<a class="fancybox" rel="' + this + '" href="' + name + '/0' + i + '.jpg"><img class="img" src="' + name + '/0' + i + '.jpg" /></a>');
              } else {
                $('.gallery').append('<a class="fancybox" rel="' + this + '" href="' + name + '/' + i +'.jpg"><img class="img" src="' + name + '/' + i + '.jpg" /></a>');
              }
            }
          });
        });
      });
    }
  });
  $(".fancybox").fancybox();
});

它创建所需的每个DIV,但不是将每个DIV放在各自的堆栈中

生日包含“生日,露营,7月4日”

露营包含“露营,7月4日”

七月四日本身

如何使它不包含后面的每个类别?

我实际上已经想出了解决方法,这很简单,而且最终总收益

我只是将$('。gallery')。append()更改为$(this).append()

另外,我知道JSON不好,我已经解决了。

$.getJSON("events.json", function(data) {
  $.each(data, function(index, d) {
    var name = d.name;
    var photos = d.count;
    $('#container').append('<div class="gallery" name="' + name + '"></div>');
    $('div[name="'+name+'"]').append(function() {
      for ( var i = 1; i <= photos; i++) {
        if (i < 10) {
          $(this).append('<a class="fancybox" rel="' + this + '" href="' + name + '/0' + i + '.jpg"><img class="img" src="' + name + '/0' + i + '.jpg" /></a>');
        } else {
          $(this).append('<a class="fancybox" rel="' + this + '" href="' + name + '/' + i +'.jpg"><img class="img" src="' + name + '/' + i + '.jpg" /></a>');
        }
      }
    });
  });
});

就是这里。希望它不会太复杂。

// Kind of necessary in the way my solution works
function getPropertyName(prop, value) {
    for (var i in prop) {
        if (prop[i] == value) {
            return i;
        }
    }
    return false;
}

$(document).ready(function () {
    $.ajax({
        url: 'events.json',
        success: function(response) {
            $.each(response, function( index, gallery ) {
                // gallery[Object.keys(gallery)[0]] gets the first property of the gallery object
                var galleryName = getPropertyName(gallery, gallery[Object.keys(gallery)[0]]);
                var numPhotos = parseInt(gallery[galleryName]);

                // I used 'data-name' instead of 'name' as the attribute to keep it more in line with the HTML standard
                $('#container').append('<div class="gallery" data-name="' + galleryName + '"></div>');

                for (var i = 1; i <= numPhotos; i++) {
                    $('div[data-name="' + galleryName + '"').append(function() {
                        if (i < 10) {
                            $(this).append('<a class="fancybox" href="' + galleryName + '/0' + i + '.jpg"><img class="img" src="' + galleryName + '/0' + i + '.jpg" /></a>');
                        } else {
                            $(this).append('<a class="fancybox" href="' + galleryName + '/' + i +'.jpg"><img class="img" src="' + galleryName + '/' + i + '.jpg" /></a>');
                        }
                    });
                };
            });
            $('.fancybox').fancybox();
        }
    });
});

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM