首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用数据属性显示/隐藏动态内容

使用数据属性显示/隐藏动态内容
EN

Stack Overflow用户
提问于 2015-07-17 10:57:26
回答 2查看 694关注 0票数 1

我正在努力实现一个

我的html代码是:

代码语言:javascript
复制
<div id="menu"></div>

<ul class="countries">
<li data-country="country-1" data-countryname="France">Category France</li>
<li data-country="country-1" data-countryname="France">Category France</li>
<li data-country="country-1" data-countryname="France">Category France</li>
<li data-country="country-1" data-countryname="France">Category France</li>
<li data-country="country-1" data-countryname="France">Category France</li>
<li data-country="country-2" data-countryname="UK">Category UK</li>
<li data-country="country-2" data-countryname="UK">Category UK</li>
<li data-country="country-2" data-countryname="UK">Category UK</li>
<li data-country="country-3" data-countryname="Germany">Category Germany</li>
</ul>

我的JS代码:

代码语言:javascript
复制
 var countries = {},
 country;
 $('.countries li[data-country]').each(function (i, el) {
     country = $(el).data('country');
     countryname = $(el).data('countryname');
     if (countries.hasOwnProperty(country)) {
         countries[country] += 1;
     } else {
         countries[country] = 1;
     }
 });

 for (var key in countries) {
     $('#menu').append('<span data-countrycode="' + key + '">' + key + ' (' + countries[key] + ')</span>');
 }

 $('#menu span').click(function () {
     var clicked = $(this).data('countrycode');
     $('li[data-country=' + clicked + ']').show(1000).siblings().hide(1000);
 });

上面的JS代码构建了一个带有国家代码-Q1的菜单),我如何显示国家名称呢?

另外,切换-隐藏/显示功能不能正常工作- Q2)有一种方法可以按国家代码过滤/显示内容吗?

最后一个问题-- Q3) --是否可以在不使用任何数据属性的情况下按第二个单词按字母顺序排列所有的列表项?

请看我的JSfiddle:http://jsfiddle.net/oja417nq/2/

非常感谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-07-17 11:06:27

Q1)如何显示国家名称?

我已经替换了所有countrycodecountryname的引用。

( Q2)有没有一种按国家代码过滤/显示内容的方法?

你在隐藏兄弟姐妹。我做了一个$().not()选择器来隐藏那些与点击的不匹配的选择器。

( Q3)是否可以在不使用任何数据属性的情况下按第二个单词按字母顺序排列所有列表项?

那么,让我们执行一个小的排序函数:

代码语言:javascript
复制
var $list = $(".countries");

$list.children().detach().sort(function(a, b) {
    return $(a).text().split(' ')[1].localeCompare($(b).text().split(' ')[1]);
}).appendTo($list);

我们只使用.text().split(' ')[1]选择两个单词,然后做一个$.sort()

完整片段:

代码语言:javascript
复制
var countries = {},
  country;
$('.countries li[data-country]').each(function(i, el) {
  country = $(el).data('country');
  countryname = $(el).data('countryname');
  if (countries.hasOwnProperty(countryname)) {
    countries[countryname] += 1;
  } else {
    countries[countryname] = 1;
  }
});

for (var key in countries) {
  $('#menu').append('<span data-countrycode="' + key + '">' + key + ' (' + countries[key] + ')</span>');
}

var $list = $(".countries");

$list.children().detach().sort(function(a, b) {
    return $(a).text().split(' ')[1].localeCompare($(b).text().split(' ')[1]);
}).appendTo($list);


$('#menu span').click(function() {
  var clicked = $(this).data('countrycode');
  $('li[data-countryname=' + clicked + ']').show(1000);
  $('li').not('[data-countryname=' + clicked + ']').hide(200);
});
代码语言:javascript
复制
#menu span {
  display: inline-block;
  margin-right: 20px;
}
代码语言:javascript
复制
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
<div id="menu"></div>

<ul class="countries">
   <li data-country="country-2" data-countryname="UK">Category UK</li>
   <li data-country="country-2" data-countryname="UK">Category UK</li>
   <li data-country="country-2" data-countryname="UK">Category UK</li>
   <li data-country="country-3" data-countryname="Germany">Category Germany</li>
   <li data-country="country-1" data-countryname="France">Category Alpha</li>
   <li data-country="country-1" data-countryname="France">Category Beta</li>
   <li data-country="country-1" data-countryname="France">Category C</li>
   <li data-country="country-1" data-countryname="France">Category D</li>
   <li data-country="country-1" data-countryname="France">Category E</li>
</ul>

关于您的问题3,您可能需要操作列表并对其进行排序功能。但我不确定你想要什么。

票数 1
EN

Stack Overflow用户

发布于 2015-07-17 11:18:54

你能做到的

代码语言:javascript
复制
var countries = {};
$('.countries li[data-country]').each(function(i, el) {
  var country = $(el).data('country');
  if (!countries[country]) {
    countries[country] = {
      count: 0,
      name: $(el).data('countryname')
    };
  }
  countries[country].count++;
});

for (var key in countries) {
  $('#menu').append('<span data-countrycode="' + key + '">' + countries[key].name + ' (' + countries[key].count + ')</span>');
}

$('#menu span').click(function() {
  var clicked = $(this).data('countrycode');
  var $els = $('li[data-country=' + clicked + ']').show(1000);
  $('.countries > li').not($els).hide(1000);
});
代码语言:javascript
复制
#menu span {
  display: inline-block;
  margin-right: 20px;
}
代码语言:javascript
复制
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<div id="menu"></div>
<ul class="countries">
  <li data-country="country-1" data-countryname="France">Category France</li>
  <li data-country="country-1" data-countryname="France">Category France</li>
  <li data-country="country-1" data-countryname="France">Category France</li>
  <li data-country="country-1" data-countryname="France">Category France</li>
  <li data-country="country-1" data-countryname="France">Category France</li>
  <li data-country="country-2" data-countryname="UK">Category UK</li>
  <li data-country="country-2" data-countryname="UK">Category UK</li>
  <li data-country="country-2" data-countryname="UK">Category UK</li>
  <li data-country="country-3" data-countryname="Germany">Category Germany</li>
</ul>

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

https://stackoverflow.com/questions/31474243

复制
相关文章

相似问题

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