【问题标题】:Strange alphabetical sorting of checkbox lists [duplicate]复选框列表的奇怪字母排序[重复]
【发布时间】:2016-11-11 16:17:39
【问题描述】:

我有 4 个复选框,每个复选框代表一个区域。单击其中任何一个会显示与该地区相关的 3 个国家/地区。单击区域复选框的组合显示所有相关国家/地区,但我想要 始终按字母顺序显示的国家/地区复选框列表。

奇怪的是,我的 jquery 似乎适用于 3 个区域复选框,但似乎不适用于 4 个。我只是看不出我在犯什么愚蠢的错误,并且开始怀疑更险恶的事情。这是我的小提琴:https://jsfiddle.net/m5v7v6kv/

感谢您的帮助。

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

var li = $(".CountryWrapper").children("label").detach().sort(sortByText)
$(".CountryWrapper").append(li)

$('input[type="checkbox"]').click(function() {
    $('.my' + $(this).attr("id")).slideToggle(200)
})
.CountryWrapper {
    border: 1px solid blue;
    height: 150px;
    width: 480px;
    border: 1px solid blue;
}
.myEuropeCountries {
    display: none;
}
.myNAMCountries {
    display: none;
}
.mySAMCountries {
    display: none;
}
.myAfricaMECountries {
    display: none;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<label><input type="checkbox" id="EuropeCountries" />Europe</label>
<label><input type="checkbox" id="NAMCountries" />North America</label>
<label><input type="checkbox" id="SAMCountries" />South America</label>
<label><input type="checkbox" id="AfricaMECountries" />Africa and Middle East</label>

<div class="CountryWrapper">
    <br>
    <label class="myEuropeCountries"><input type="checkbox" value="Spain" />Spain</label>
    <label class="myEuropeCountries"><input type="checkbox" value="Germany" />Germany</label>
    <label class="myEuropeCountries"><input type="checkbox" value="Austria" />Austria</label>
    
    <label class="myNAMCountries"><input type="checkbox" value="USA" />USA</label>
    <label class="myNAMCountries"><input type="checkbox" value="Mexico" />Mexico</label>
    <label class="myNAMCountries"><input type="checkbox" value="Canada" />Canada</label>

    <label class="mySAMCountries"><input type="checkbox" value="Brazil" />Brazil</label>
    <label class="mySAMCountries"><input type="checkbox" value="Argentina" />Argentina</label>
    <label class="mySAMCountries"><input type="checkbox" value="Chile" />Chile</label>

    <label class="myAfricaMECountries"><input type="checkbox" value="SouthAfrica" />South Africa</label>
    <label class="myAfricaMECountries"><input type="checkbox" value="Egypt" />Egypt</label>
    <label class="myAfricaMECountries"><input type="checkbox" value="SaudiArabia" />Saudi Arabia</label>
</div>

【问题讨论】:

  • 您只会返回10。排序需要一个正数、0 或负数。 stackoverflow.com/questions/5503900/…
  • 您需要返回-101,具体取决于ab的比较结果。返回 0(或任何强制转换为 0 的内容)是告诉排序函数,项目将被视为相等。
  • 抱歉,作为菜鸟你能多解释一下吗?
  • @Silverburch 类似if (a &lt; b) { return -1; } if (a == b) { return 0; } if (a &gt; b) { return 1; }
  • 当我的大脑已经崩溃时,你能不能把它放在小提琴中!

标签: javascript jquery checkbox alphabetical


【解决方案1】:

看起来您的比较函数应该返回 1 或 -1。在您的情况下,真的没有理由返回0,除非两个国家以某种方式具有相同的名称。

return $.trim($(a).text()) > $.trim($(b).text()) ? 1 : -1;

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

var li = $(".CountryWrapper").children("label").detach().sort(sortByText)
$(".CountryWrapper").append(li)

$('input[type="checkbox"]').click(function() {
  $('.my' + $(this).attr("id")).slideToggle(200)
})
.CountryWrapper {
  border: 1px solid blue;
  height: 150px;
  width: 480px;
  border: 1px solid blue;
}

.myEuropeCountries {
  display: none;
}

.myNAMCountries {
  display: none;
}

.mySAMCountries {
  display: none;
}

.myAfricaMECountries {
  display: none;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<label>
  <input type="checkbox" id="EuropeCountries" />Europe</label>

<label>
  <input type="checkbox" id="NAMCountries" />North America</label>

<label>
  <input type="checkbox" id="SAMCountries" />South America</label>

<label>
  <input type="checkbox" id="AfricaMECountries" />Africa and Middle East</label>

<!-------------------------------------------------------------------->

<div class="CountryWrapper">

  <br>
  <label class="myEuropeCountries">
    <input type="checkbox" value="Spain" />Spain</label>
  <label class="myEuropeCountries">
    <input type="checkbox" value="Germany" />Germany</label>
  <label class="myEuropeCountries">
    <input type="checkbox" value="Austria" />Austria</label>

  <label class="myNAMCountries">
    <input type="checkbox" value="USA" />USA</label>
  <label class="myNAMCountries">
    <input type="checkbox" value="Mexico" />Mexico</label>
  <label class="myNAMCountries">
    <input type="checkbox" value="Canada" />Canada</label>

  <label class="mySAMCountries">
    <input type="checkbox" value="Brazil" />Brazil</label>
  <label class="mySAMCountries">
    <input type="checkbox" value="Argentina" />Argentina</label>
  <label class="mySAMCountries">
    <input type="checkbox" value="Chile" />Chile</label>

  <label class="myAfricaMECountries">
    <input type="checkbox" value="SouthAfrica" />South Africa</label>
  <label class="myAfricaMECountries">
    <input type="checkbox" value="Egypt" />Egypt</label>
  <label class="myAfricaMECountries">
    <input type="checkbox" value="SaudiArabia" />Saudi Arabia</label>

</div>

【讨论】:

  • 感谢大家,特别感谢@epascarello 提供的详细信息。现在一切都很好。我仍然有点困惑,为什么如果我把 S.America 排除在外,一切都按预期进行。
猜你喜欢
  • 1970-01-01
  • 2023-03-20
  • 1970-01-01
  • 2018-10-12
  • 1970-01-01
  • 1970-01-01
  • 2018-11-22
  • 1970-01-01
  • 2019-09-21
相关资源
最近更新 更多