【问题标题】:using a string as an array name使用字符串作为数组名
【发布时间】:2019-03-26 14:57:16
【问题描述】:

我正在尝试动态获取正确数组的名称,然后显示该数组的内容。不知道该怎么做:

html:

<div class="grid" id="arrSemmes">
      <div class="grid-sizer"></div>
      <div class="grid-item"><img src="img/2019/s1-thumb.jpg" /></div>
      <div class="grid-item"><img src="img/2019/s2-thumb.jpg" /></div>
      <div class="grid-item"><img src="img/2019/s3-thumb.jpg" /></div>
      <div class="grid-item"><img src="img/2019/s4-thumb.jpg" /></div>
</div>

jquery:

    var thisIndex;
    var arrSemmes = [
        ["2019/s1.jpg", "caption1"],
        ["2019/s2.jpg", "caption2"],
        ["2019/s3.jpg", "caption3"],
        ["2019/s4.jpg", "caption4"],
    ];

$('.grid-item img').on('click', function() {
        var thisArray = $(this).parent().parent().attr('id'); //returns a string: arrSemmes
        thisIndex = $(this).attr('src');
        thisIndex = thisIndex.replace('-thumb.jpg','');
        thisIndex = thisIndex.replace('img/2019/s','');
        thisIndex = thisIndex--; //must be one less for the array key
        alert(thisArray[thisIndex][0]); //thinks I want a letter in the string "thisArray"
    });

【问题讨论】:

  • thisIndex 是一个字符串,所以 thisIndex-- 没有意义。您不能从字符串中减去 1。
  • "...获取正确数组的名称"什么数组的名称?
  • @zer00ne:名为arrSemmes的数组,是网格的id,是我代码中多维数组的变量名。
  • "/thinks I want a letter in the string "thisArray"" 一个字符串可以是一个数组,如果你对它进行索引,它会将每个字符视为一个数组元素。
  • @zer00ne:我的问题是,如何获取将 thisArray 视为数组而不是字符串的代码?

标签: jquery multidimensional-array


【解决方案1】:

简化您的逻辑。使用数据属性并移除基于位置的逻辑。

根据您的评论,我还包含了上一个和下一个按钮的逻辑,使用一个类来识别哪个图像是当前图像,并进行相应的调整。

var $images = $('.grid-item img').on('click', function() {
  var $img = $(this);
  console.log($img.data('src'), $img.data('caption'));
  
  $images.removeClass('current');
  $img.addClass('current');
});

function adjustCurrentImage ( adjustment ) {
  var currentImageIndex = $images.index($images.filter('.current'));
  var nextImageIndex = currentImageIndex + adjustment;
  
  if (-1 < nextImageIndex && nextImageIndex < $images.length) {
    $images.removeClass('current');
    $images.eq(nextImageIndex).addClass('current');
    console.log($images.eq(nextImageIndex).data('src'), $images.eq(nextImageIndex).data('caption'));
  }
}

$('#prev').on('click', function(){ adjustCurrentImage(-1); });
$('#next').on('click', function(){ adjustCurrentImage(1); });
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<div class="grid" id="arrSemmes">
  <div class="grid-sizer"></div>
  <div class="grid-item"><img src="img/2019/s1-thumb.jpg" data-src="2019/s1.jpg" data-caption="caption1" /></div>
  <div class="grid-item"><img src="img/2019/s2-thumb.jpg" data-src="2019/s2.jpg" data-caption="caption2" /></div>
  <div class="grid-item"><img src="img/2019/s3-thumb.jpg" data-src="2019/s3.jpg" data-caption="caption3" /></div>
  <div class="grid-item"><img src="img/2019/s4-thumb.jpg" data-src="2019/s4.jpg" data-caption="caption4" /></div>
</div>
<button id="prev">Previous Image</button>
<button id="next">Next Image</button>

【讨论】:

  • 我需要该数组,因为我将允许用户单击箭头在弹出窗口中的图像中前进和后退。
  • @LauraNMS 编辑了答案以表明下一个和上一个逻辑也可以在没有数组的情况下完成。
  • 我会将您的答案标记为正确,但这意味着我必须重命名其他数组中的所有图像。
猜你喜欢
  • 2016-08-17
  • 1970-01-01
  • 1970-01-01
  • 2020-02-14
  • 2012-06-24
  • 2017-12-11
  • 2011-07-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多