按字母顺序排序Jquery列表

Sorting a Jquery list alphabetically

本文关键字:Jquery 列表 排序 顺序      更新时间:2023-09-26

我正在从外部源提取数据,数据似乎在每次页面刷新后以不同的顺序出现。我不确定这是否与我的jquery或缺乏。或者如果它与我用来收集数据的谷歌财务数据有关。理想情况下,我希望它按照第一列的字母顺序排序。

我坚持认为必须有一种方法来排序数组,而不会随机填充列表。JSfiddle:

https://jsfiddle.net/vkf0jhpq/

$(document).ready(function () {
    for (var i = 0; i < gstock.length; i++) {
        $.getJSON("https://finance.google.com/finance/info?client=ig&q=" + gstock[i] + "&callback=?", function (response) {
            var stockInfo1 = response[0];
            var divContainer = $('*[data-symbol="' + stockInfo1.t + '"]');
            var percentStock = !isNaN(stockInfo1.c) && !isNaN(stockInfo1.l) && stockInfo1.l ? ((parseFloat(stockInfo1.c)/parseFloat(stockInfo1.l)) * 100) : undefined;

您的问题是您正在进行异步调用以获取每个股票(意味着它们将同时运行),然后在调用成功时附加每个项目。

这意味着每个条目将根据执行请求所花费的时间来追加,因此如果第一个请求比第二个请求花费的时间稍长,第二个请求将在第一个请求之前显示(这就是为什么它们看起来是随机顺序的)。

阻止这种情况并保持顺序的一种方法是使调用同步,但我认为这会使页面加载时间更长。

另一种方法是使用.when,这样您就可以使用ajax来填充var,然后一旦所有调用完成,您可以将结果var按您想要的顺序排序,然后将它们附加到文档

这是一个快速示例,展示了将附加项保持与gstock var

相同顺序的一种方法

你不能在跨域值中使用$.ajax()的同步调用。你必须使用这个语法

$.when( $.getJSON( YOUR_RESOURCE ) ).then( function( data, status, jqXHR ) {
    alert( jqXHR.status );
});

in accordance with http://api.jquery.com/jQuery.when/

更新:参见以下示例

$.when( $.ajax( "/page1.php" ), $.ajax( "/page2.php" ) ).done(function( a1, a2 ) {
  // a1 and a2 are arguments resolved for the page1 and page2 ajax requests, respectively.
  // Each argument is an array with the following structure: [ data, statusText, jqXHR ]
  var data = a1[ 0 ] + a2[ 0 ]; // a1[ 0 ] = "Whip", a2[ 0 ] = " It"
  if ( /Whip It/.test( data ) ) {
    alert( "We got what we came for!" );
  }
});

更新2:

jsfiddle示例(仅console.log但工作)https://jsfiddle.net/k41y4yqu/1/