按字母顺序从复选框组合中生成动态结果

时间:2016-11-06 09:44:21

标签: javascript jquery checkbox alphabetical

我保证搜索了很多,但没有找到真正答案的东西。

我希望根据我检查过的区域组合显示按字母顺序排列的国家/地区列表。到目前为止,我已经能够为个别地区实现这一目标,但不能用于组合。见https://jsfiddle.net/ro5yjg1c/ 我想要的是,例如,如果我点击欧洲'和亚洲'复选框,我希望在按字母顺序排列的连续列表中看到以下复选框: "奥地利中国德国日本西班牙泰国"。任何其他组合也需要工作。这可能吗?

任何帮助非常感谢

<label>
<input type="checkbox" name="colorCheckbox" id="Europe" />Europe</label>
<label>
<input type="checkbox" name="colorCheckbox" id="Africa" />Africa</label>
<label>
<input type="checkbox" name="colorCheckbox" id="Asia" />Asia</label>


<div class="mywrapper">

<div id="myEurope">
<label>
  <input type="checkbox" value="Spain" />Spain</label>
<label>
  <input type="checkbox" value="Germany" />Germany</label>
<label>
  <input type="checkbox" value="Austria" />Austria</label>
</div>

<div id="myAfrica">
<label>
  <input type="checkbox" value="Nigeria" />Nigeria</label>
<label>
  <input type="checkbox" value="Egypt" />Egypt</label>
<label>
  <input type="checkbox" value="Kenya" />Kenya</label>
</div>

<div id="myAsia">
<label>
  <input type="checkbox" value="Thailand" />Thailand</label>
<label>
  <input type="checkbox" value="China" />China</label>
<label>
  <input type="checkbox" value="Japan" />Japan</label>
</div>

</div>



$(function() {
$('input[type="checkbox"]').click(function() {

var sortByText = function(a, b) {
return $.trim($(a).text()) > $.trim($(b).text()); 
}

// --------------
if ($(this).attr("id") == "Europe") {
var sorted = $('#myEurope label').sort(sortByText);
$('#myEurope').append(sorted);
$("#myEurope").slideToggle(200)
}
// --------------
if ($(this).attr("id") == "Africa") {
var sorted = $('#myAfrica label').sort(sortByText);
$('#myAfrica').append(sorted);
$("#myAfrica").slideToggle(200)
}
// --------------
if ($(this).attr("id") == "Asia") {
var sorted = $('#myAsia label').sort(sortByText);
$('#myAsia').append(sorted);
$("#myAsia").slideToggle(200)
}
// --------------

});
});



.mywrapper {
border: 1px solid blue;
height: 200px;
width: 300px;
border: 1px solid blue;
}

#myEurope {
display: none;
}

#myAfrica {
display: none;
}

#myAsia {
display: none;
}

1 个答案:

答案 0 :(得分:0)

您需要取消区域div中的元素(例如删除),以便它们出现在同一级别的数组中进行排序。您仍然可以使用相关国家/地区的css类来选择元素,只需将css选择器从元素更改为类:

.myEurope {
  display: none;
}

将类应用于相关标签:

<label class="myEurope">
    <input type="checkbox" value="Spain" />Spain</label>
<label class="myEurope">
    <input type="checkbox" value="Germany" />Germany</label>

之后可以大大简化JS代码(参见fiddle):

function sortByText(a, b) {
  return $.trim($(a).text()) > $.trim($(b).text());
}

// Pre-sort all the countries under mywrapper div (still keeping them hidden)
var li = $(".mywrapper").children("label").detach().sort(sortByText)
$(".mywrapper").append(li)

// On-click handler will just toggle display, countries already sorted
$('input[type="checkbox"]').click(function() {
 $('.my' + $(this).attr("id")).slideToggle(200)
})