【问题标题】:Am I using the jQuery .each function incorrectly?我是否错误地使用了 jQuery .each 函数?
【发布时间】:2015-05-08 12:58:49
【问题描述】:

我正在使用一些 jQuery 从第三方网站检索和解析一些 JSON,因此我可以使用来自该网站的图像来填充画廊。

详情请看下文,转载于this JSFiddle

 $(document).ready(function() {
   function populateImages(path) {
     $('.crush').each(function() {
       $(this).html('<img src="' + path + '/>');
     });
   }
   $.ajax({
     url: 'http://tubecrush.net/wp_api/v1/posts?callback=show',
     dataType: "jsonp",
     type: "get",
     success: function(data) {
       var regex = /"/g;
       var i = 0;
       for (i = 0; i < 20; i++) {
         var content = data.posts[i].content_display;
         var part1 = content.split('src="');
         var part2 = part1[1].split(regex);
         var imgPath = part2[0];
         console.log(imgPath);
         populateImages(imgPath);

       }
     }
   });

 });
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.0/jquery.min.js"></script>
<h1>Result:</h1>

<div id="result">
  <div class="pure-g">
    <div class="crush"></div>
    <div class="crush"></div>
    <div class="crush"></div>
    <div class="crush"></div>
    <div class="crush"></div>
    <div class="crush"></div>
    <div class="crush"></div>
    <div class="crush"></div>
    <div class="crush"></div>
    <div class="crush"></div>
    <div class="crush"></div>
    <div class="crush"></div>
    <div class="crush"></div>
    <div class="crush"></div>
    <div class="crush"></div>
    <div class="crush"></div>
    <div class="crush"></div>
    <div class="crush"></div>
    <div class="crush"></div>
    <div class="crush"></div>
    <div class="crush"></div>
    <div class="crush"></div>
    <div class="crush"></div>
    <div class="crush"></div>
  </div>
</div>

我知道检索 JSON 查询的部分正在工作,因为它正在输出我想在控制台中抓取的图像路径。但是,最后一部分是使用 jQuery .each 函数添加一个标签并用我用 AJAX 检索到的路径填充它,但它不起作用。

不知道我做错了什么。

请注意,虽然第二部分是在它自己的名为populateImages 的函数中,但我已经尝试将该代码嵌入到循环部分中,并且仍然具有相同的效果。

如果有人可以提供帮助,我们将不胜感激。

【问题讨论】:

  • jsfiddles 很有帮助,但除了在问题中添加相关代码外,还应包括在内。请将相关代码添加到您的问题正文中。

标签: javascript jquery ajax json each


【解决方案1】:

您不应该为此使用each,这仅意味着您将在第一个 URL 的每个元素中放置一个图像,然后将它们全部替换为第二个 URL 的图像,依此类推。您可以使populateImages 函数获取要放置图像的索引。使用eq方法获取特定元素:

function populateImages(index, path) {
  $('.crush').eq(index).html('<img src="' + path + '"/>');
}

以循环计数器为索引调用函数:

populateImages(i, imgPath);

【讨论】:

    【解决方案2】:

    您可以使用 jQuery 的eq() 轻松缩小选择范围。

    http://jsfiddle.net/BramVanroy/rzg64bvh/6/

     $(document).ready(function () {
         $.ajax({
             url: 'http://tubecrush.net/wp_api/v1/posts?callback=show',
             dataType: "jsonp",
             type: "get",
             success: function (data) {
                 var regex = /"/g;
                 var i = 0;
                 for (i = 0; i < 20; i++) {
                     var content = data.posts[i].content_display;
                     var part1 = content.split('src="');
                     var part2 = part1[1].split(regex);
                     var imgPath = part2[0];
                     console.log(imgPath);
                     $('.crush').eq(i).html('<img src="' + imgPath + '">');
                 }
             }
         });
     });
    

    【讨论】:

    • 太棒了,谢谢!我不知道 .eq 函数
    【解决方案3】:

    每次循环进行迭代时,您都会使用相同的图像填充每个.crush。这应该有效:

     $(document).ready(function(){
         var crushes = $('.crush');
    
         $.ajax({
             url:'http://tubecrush.net/wp_api/v1/posts?callback=show',
             dataType:"jsonp",
             type:"get",
             success:function(data){
                 var regex = /"/g;
                 var i = 0, l = crushes.length;
                 for(i=0;i<l;i++) {
                     var content = data.posts[i].content_display;
                     var part1 = content.split('src="');
                     var part2 = part1[1].split(regex);
                     var imgPath = part2[0];
                     console.log(imgPath);
                     crushes.eq(i).html('<img src="' + imgPath + '"/>');
                 } 
             }
         });
     });
    

    【讨论】:

    • 嗨,是的,我认为这在该代码的先前迭代中也应该可以工作,但是当我运行它时,控制台中出现错误Uncaught TypeError: undefined is not a function
    • crushes[i].html('&lt;img src="' + imgPath + '"/&gt;');
    • 这里crushes[i],用crushes.eq(i)代替
    • 糟糕,比起 jQuery 函数,我更习惯于原生 JS。 @BramVanroy 的 crushes.eq(i) 应该可以解决这个问题。编辑了我的答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-07-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多