我有以下代码:

<!DOCTYPE HTML>
<html>
    <head>
        <title>
            Sort a list alphabetically
        </title>

        <script src =
"https://ajax.googleapis.com/ajax/libs/jquery/3.4.0/jquery.min.js">
        </script>
    </head>

    <body>
        <button>
                click here
            </button>

        <ul>
            <li>Geeks</li>
            <li>Sosna</li>
            <li>Zebra</li>
            <li>GeeksForGeeks</li>
          <li><h1>G</h1></li>
            <li><h1>F</h1></li>
            <li>Arbuz</li>
            <li><h1>A</h1></li>
          <li>Łódź</li>
            <li><h1>Ł</h1></li>
          <li>ósmy</li>
            <li><h1>Ó</h1></li>
          <li>święty</li>
            <li><h1>Ś</h1></li>
          <li>ärgern</li>
            <li><h1>Ä</h1></li>
          <li>Österreich</li>
            <li><h1>Ö</h1></li>
          <li>Überraschung</li>
            <li><h1>Ü</h1></li>
        </ul>

        <script>
            function Ascending_sort(a, b) {
                return ($(b).text().toUpperCase()) <
                    ($(a).text().toUpperCase()) ? 1 : -1;
            }
            $('button').on('click', function() {
                $("ul li").sort(Ascending_sort).appendTo('ul');
            });
        </script>
    </body>
</html>


Codepen:https://codepen.io/rudolph-reti/pen/dyPzXER

我刚刚开始学习JavaScript。我不能独自处理。我希望使用localeCompare()函数对列表进行排序。有人可以帮我把它放进脚本吗?

最佳答案

.localeCompare()已经返回了.sort()期望的正确Number值,因此您不必担心自己这样做

从文档中,返回值.localeCompare()


  如果参考字符串位于比较字符串之前,则为负数;否则为负。如果参考字符串出现在比较字符串之后,则为正;如果它们相等则为0。




const alphabet = "abcdefghijklmnopqrstuvwxyzäöüß";

function letterSort(a, b) {
  b = $(b).text().trim().toLowerCase();
  a = $(a).text().trim().toLowerCase();

  // Find the first position were the strings do not match
  let position = 0;

  while(a[position] === b[position]) {
      // If both are the same don't swap
      if(!a[position] && !b[position]) return 0;

      // Otherwise the shorter one goes first
      if(!a[position]) return 1;
      if(!b[position]) return -1;

      position++;
  }

  // Then sort by the characters position
  return alphabet.indexOf(a[position]) - alphabet.indexOf(b[position]);
}

$('button').on('click', function() {
  $("ul li").sort(letterSort).appendTo('ul');
});

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>

<body>
  <button>Click here</button>

  <ul>
    <li>Geeks</li>
    <li>Sosna</li>
    <li>Zebra</li>
    <li>GeeksForGeeks</li>
    <li>
      <h1>G</h1>
    </li>
    <li>
      <h1>F</h1>
    </li>
    <li>Arbuz</li>
    <li>
      <h1>A</h1>
    </li>
    <li>Łódź</li>
    <li>
      <h1>Ł</h1>
    </li>
    <li>ósmy</li>
    <li>
      <h1>Ó</h1>
    </li>
    <li>święty</li>
    <li>
      <h1>Ś</h1>
    </li>
    <li>ärgern</li>
    <li>
      <h1>Ä</h1>
    </li>
    <li>Österreich</li>
    <li>
      <h1>Ö</h1>
    </li>
    <li>Überraschung</li>
    <li>
      <h1>Ü</h1>
    </li>
  </ul>
</body>

10-06 04:40