【问题标题】:Data attribute selector to output from multidimensional array从多维数组输出的数据属性选择器
【发布时间】:2016-10-17 10:29:20
【问题描述】:

这是我发布的第一个问题,如果格式错误,我深表歉意。

这是我的代码:

var words = [ ["first"],["second"],["third"] ];

$('.categories li a').click(function() {
    $('.output').empty();
    $(this).toggleClass('active');
    var myEm = $(this +".active").data('words');
    alert(myEm);
    $('.output').append(words[myEm]);
});
.active {
  color: red;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<ul class="categories">
  <li><a data-words="0">First</a></li>
  <li><a data-words="1">Second</a></li>
  <li><a data-words="2">Third</a></li>
</ul>

<div class="output"></div>

所以第一,第二和第三是我的类别,如果您选择“第一”,我希望它输出我的 html 中的第一个数组,这工作正常。我遇到的问题是我想拥有它,所以如果用户选择“First”和“Second”,它会输出这两个数组,但它只选择“First”数组。这是我需要使用的每个函数来实现这一点吗?

希望我已经解释得足够清楚了。

感谢您的帮助。

谢谢

【问题讨论】:

  • 也许将$(this +".active") 更改为$(this) 以便引用被选中的元素?

标签: javascript jquery arrays multidimensional-array attributes


【解决方案1】:

我对您的代码进行了一些更改,现在它将显示您选择的所有项目。

var words = [["first"], ["second"], ["third"]];

            $('.categories li a').click(function () {
                $('.output').empty();
                $(this).toggleClass('active');
                $('.categories li a.active').each(function (index) {
                    var myEm = $(this).data('words');
                    alert(myEm);
                    debugger;
                    if (words[myEm])
                        $('.output').append(words[myEm]);
                }); 
            });
.active {
  color: red;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<ul class="categories">
  <li><a data-words="0">First</a></li>
  <li><a data-words="1">Second</a></li>
  <li><a data-words="2">Third</a></li>
</ul>

<div class="output"></div>

【讨论】:

  • 完美,这就是我所追求的。谢谢
【解决方案2】:

$(this +".active") 看起来像是一个无效的选择器。

替换为

$(this)

因为无论如何你都想引用当前元素。

此外,您需要先从其他列表元素中删除 active 类,然后再添加到当前/单击的元素。

var words = [ ["first"],["second"],["third"] ];

$('.categories li a').click(function() {
    $('.output').empty();
    $('.categories li a').removeClass('active');
    $(this).addClass('active');
    var myEm = $(this).data('words');
    alert(myEm);
    $('.output').append(words[myEm]);
});
.active {
  color: red;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<ul class="categories">
  <li><a data-words="0">First</a></li>
  <li><a data-words="1">Second</a></li>
  <li><a data-words="2">Third</a></li>
</ul>

<div class="output"></div>

【讨论】:

    【解决方案3】:

    你可以多用一个数组来存储选中的数据:-

    var words = [ ["first"],["second"],["third"] ];
    var selectedwords = [];
    $('.categories li a').click(function() {
        $('.output').empty();
        $(this).toggleClass('active');
        var myEm = $(this).data('words');
    		if($(this).hasClass('active')){
        	selectedwords.push(words[myEm]);
     		}else{
        	var index = selectedwords.indexOf(words[myEm]);
          selectedwords.splice( index, 1 );
    		}
        alert(myEm);
        $('.output').append(selectedwords.toString());
    });
    .active {
      color: red;
    }
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
    <ul class="categories">
      <li><a data-words="0">First</a></li>
      <li><a data-words="1">Second</a></li>
      <li><a data-words="2">Third</a></li>
    </ul>
    
    <div class="output"></div>

    【讨论】:

      【解决方案4】:

      试试这个,我已经编辑了一些你的代码来正常工作

      var words = [ ["first"],["second"],["third"] ];
      
      $('.categories li a').click(function() {
          //$('.output').empty();
          //$(".categories li a").removeClass("active");
          $(this).toggleClass('active');
          var myEm = $(this).attr('data-words');
          alert(myEm);
          $('.output').append(words[myEm]);
      });
      .active {
        color: red;
      }
      <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
      <ul class="categories">
        <li><a data-words="0">First</a></li>
        <li><a data-words="1">Second</a></li>
        <li><a data-words="2">Third</a></li>
      </ul>
      
      <div class="output"></div>

      【讨论】:

      • 谢谢,但我想要多选。因此,如果用户选择“第一”和“第二”,它会从我的“单词”中输出 [0] 和 [1],即:firstsecond
      猜你喜欢
      • 2022-11-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-25
      • 1970-01-01
      • 2013-02-05
      • 2014-11-24
      • 2015-12-21
      相关资源
      最近更新 更多