【问题标题】:jQuery .each only works for first itemjQuery .each 仅适用于第一项
【发布时间】:2021-02-12 21:40:14
【问题描述】:

我正在尝试预加载一个 html 文件,其内容随后将用于遍布整个网站的多个可扩展按钮。

问题是只有页面的第一个按钮的内容以这种方式加载,其余按钮在展开时什么都不显示。

我确实注意到这里还有其他关于类似问题的问题,但我遇到的解决方案似乎都不适用于这种情况。因此,任何帮助将不胜感激。

脚本的相关部分:

$(document).ready(function () {
     
    var thisLink = $("a.ajax-link");
    var targetUrl = thisLink.attr("data-href");
    var target = thisLink.data("ajaxtarget");
 
    $(target).each(function( index, btn ) {
        $(this).load(targetUrl, function () {
          console.log('Success');
        });
      });
    
});

如果有任何其他信息可能对您有用,请告诉我。 非常感谢您的宝贵时间

【问题讨论】:

  • 请注意,您的 ajax 代码没有任何意义,您获取了文件,但没有在任何地方使用 html。如果这只是示例,那么您可以删除 $.ajax,因为它与问题无关,因为它不执行任何操作。
  • 你是对的,@jcubic。我只是从脚本中复制/粘贴了代码的确切部分,认为它可能会帮助某人发现错误。现在收拾东西。

标签: jquery each preload


【解决方案1】:

假设选择器a.ajax-link 选择了所有可扩展链接,那么var thisLink = $("a.ajax-link"); 包含页面上所有可扩展链接元素的数组。因此,使用var target = thisLink.data("ajaxtarget");,您只会收到数组中第一个元素的数据属性。

解决方法很简单:

您需要为每个可扩展链接运行 foreach 循环,并从每个链接中获取相应的数据。

$(document).ready(function () {
   $.ajax({
     url: "http://example.com/path/to/html/file",
     dataType: "html",
     success: function(html) {
        $.each($("a.ajax-link"), function() {
          let targetUrl = $(this).data('href');
          let $target = $($(this).data('ajaxtarget'));
          $target.load(targetUrl, function() {
            console.log('success');
          });
        });
     }
    });
});

【讨论】:

  • 成功了,谢谢。对于详细的解释;它确实帮助我更好地理解了 .each 的工作原理。
猜你喜欢
  • 2012-06-12
  • 2012-03-11
  • 1970-01-01
  • 2021-02-10
  • 2020-12-08
  • 2016-12-12
  • 2013-05-26
  • 1970-01-01
相关资源
最近更新 更多