首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何将html作为字符串传递给另一个函数中的循环?

如何将html作为字符串传递给另一个函数中的循环?
EN

Stack Overflow用户
提问于 2013-02-09 00:01:21
回答 1查看 162关注 0票数 1

我面临着以下问题。我有一个函数,它在成功时返回JSON数据。我正在尝试制作无限滚动,所以在这个函数中,我正在准备html,以便在另一个函数中循环,这将完成这项工作。服务器将JSON返回给我:

代码语言:javascript
复制
{ "id" : 6,
  "title" : "Store Title #1",
  "movies" : [{ "id" : 1164,
                "title" : "Movie 1",
                "publishDate" : "1993-01-01T00:00:00",
                "description" : "{long description...}" },
              { "id" : 8452,
                "title" : "Movie 2",
                "publishDate" : "1985-01-01T00:00:00",
                "description" : "{long description...}" },
              { "id" : 6451,
                "title" : "Movie 3",
                "publishDate" : "1945-01-01T00:00:00",
                "description" : "{long description...}" }]
}

成功时的函数:

代码语言:javascript
复制
     function onsuccess(data) {
        var libraryInfoHTML = '<h2 data-id="' + data.id + '">' + data.title + '</h2><ul></ul>';
        var receivedData = data.movies;
        var loopHTML = 
            '<li>' +
                '<h3 class="clear"><span class="icons video-library video-icon"></span>' +
                    '<a href="#" title="' + receivedData[i].title + '" data-id="' + receivedData[i].id + '">' +
                        receivedData[i].title +
                    '</a>' +
                '</h3>' +
                '<h4 class="clear"><span class="icons publish-date"></span>' +
                    receivedData[i].publishDate +
                '</h4>' +
                '<p>' +
                    receivedData[i].description +
                '</p>' +
            '</li>';
    infinityScroll(receivedData, loopHTML);
}

无限滚动功能:

代码语言:javascript
复制
function infinityScroll(received_data, loop_HTML) {
    var i=0;
    var length = received_data.length;
    var items_to_load = 10;
    function loop() {
        var html_maker = '';
        for(; i<items_to_load; i++) {
            html_maker +=
                loop_HTML;
        }
        items_to_load += i;
        $('#container ul').append(html_maker);
    }

    function scroller() {
        if ($(window).scrollTop() >= ($(document).height() - $(window).height())*0.95){
            loop();
        }
    }
    $(window).scroll(scroller);
}

所以第一个函数会给出错误,因为"i“是未定义的。我希望将"loopHTML“内容传递给"function loop()”,并希望它循环"receivedDatai“。我想我应该将"loopHTML“内容转换为字符串,但是如何区分非字符串的"receivedDatai”位置呢?你能告诉我做这个的更好的方法吗?请不要建议我插件,因为我想让简单的无限滚动。提前感谢!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-02-09 00:39:22

我认为您想要的是将一个函数传递给infinityScroll,该函数包含接收到的数据,并且可以将i作为参数:

代码语言:javascript
复制
 function onsuccess(data) {
     var libraryInfoHTML = '<h2 data-id="' + data.id + '">' + data.title + '</h2><ul></ul>';

     var htmlFunction = (function () {
         var receivedData = data.movies;
         return function (i) {
             if (i < receivedData.length) {
                 return '<li>' +
                     '<h3 class="clear"><span class="icons video-library video-icon"></span>' +
                     '<a href="#" title="' + receivedData[i].title + '" data-id="' + receivedData[i].id + '">' + receivedData[i].title +
                     '</a>' +
                     '</h3>' +
                     '<h4 class="clear"><span class="icons publish-date"></span>' + receivedData[i].publishDate +
                     '</h4>' +
                     '<p>' + receivedData[i].description +
                     '</p>' +
                     '</li>';
             }
         };
     })();
     infinityScroll(htmlFunction);
 }

然后调整infinityScroll...

代码语言:javascript
复制
function infinityScroll(loopHtmlFunction) {
    var items_to_load = 10;
    var i = 0;
    var html;
    function loop() {
        var html_maker = '';
        for(; i<items_to_load && html = loopHtmlFunction(i); i++) {
            html_maker += html;
        }
        items_to_load += i;
        $('#container ul').append(html_maker);
    }    
    // etc.
}

请注意,这也会检查receivedData中是否有更多的电影数据,如果没有,就不会再添加到html中。但是,您可能想要调整infinityScroll函数的其余部分,以便一旦没有更多的电影数据,它就停止滚动。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/14776539

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档