Javascript jQuery inArray()始终返回-1

Javascript jQuery inArray()始终返回-1,javascript,jquery,sorting,Javascript,Jquery,Sorting,我想对如下列表进行排序: <ul> <li>L</li> <li>S</li> <li>XXS</li> <li>XS</li> <li>XL</li> <li>L</li> </ul> L XXS XS XL L 使用Javascript和jQuery获得正确的服装尺寸顺

我想对如下列表进行排序:

<ul>
    <li>L</li>
    <li>S</li>
    <li>XXS</li>
    <li>XS</li>
    <li>XL</li>
    <li>L</li>
</ul>
  • L
  • XXS
  • XS
  • XL
  • L
使用Javascript和jQuery获得正确的服装尺寸顺序 我的尝试是:

var mylist = jQuery('#filter-size .mana-list');
var listitems = mylist.children('li').get();
listitems.sort(function (a, b) {

    var sizes = new Array();
    sizes = ["XXXS", "XXS", "XS", "S", "S-M", "S-L", "M", "M-L", "L", "L-XL", "XL", "XXL", "XXXL"];

    var compA = jQuery(a).text().toUpperCase();
    var compB = jQuery(b).text().toUpperCase();

    var asize = jQuery.inArray(compA, sizes);
    var bsize = jQuery.inArray(compB, sizes);

    return (asize > bsize) ? -1 : (asize < bsize) ? 1 : 0;
})
var mylist=jQuery('#filter size.mana list');
var listitems=mylist.children('li').get();
排序(函数(a,b){
变量大小=新数组();
尺寸=[“XXXS”、“XXS”、“XS”、“S”、“S-M”、“S-L”、“M”、“M-L”、“L”、“L-XL”、“XL”、“XXL”、“XXXL”];
var compA=jQuery(a.text().toUpperCase();
var compB=jQuery(b.text().toUpperCase();
var asize=jQuery.inArray(compA,size);
var bsize=jQuery.inArray(compB,size);
返回值(asize>bsize)?-1:(asize
我的问题是inArray()函数总是返回-1 我做错了什么

(注意:我在“无冲突”模式下使用jQuery)


提前谢谢大家

您的代码看起来太复杂了

这还将生成项目的排序列表,并避免在comparator函数中使用昂贵的DOM(和jQuery)调用:

// get all of the text items, in order, in upper case
var listitems = jQuery('ul').children('li').map(function() {
    return jQuery(this).text().toUpperCase();
}).get();

// keep this outside the function to avoid instantiating it
// every time the comparator is called
var sizes = ["XXXS", "XXS", "XS", "S", "S-M", "S-L", "M",
                 "M-L", "L", "L-XL", "XL", "XXL", "XXXL"];

// just compare the "inArray" values to sort    
listitems.sort(function(a, b) {
    return jQuery.inArray(b, sizes) - jQuery.inArray(a, sizes);
})
注意在比较器函数中使用了一个简单的减号运算符-这个运算符从最大到最小排序,比较器只需要产生“负、零、正”,而不是“-1、0、1”

注意:这不会改变页面中的元素-请澄清这是否是您的意图


参见Alnitak优秀答案的后续内容

你那一类很好。如果您确实想更新显示,以下类似内容(快速编写)将起到作用:

var newList = $('<ul></ul>');
newList.append(listitems);
mylist.replaceWith(newList);
var newList=$('
    '); 追加(列表项); mylist.replaceWith(新列表);

    (也许有更好的方法,
    newList
    可以一次使用
    listitems
    构建。)

    你能发布
    console.log(compA)
    console.log(asize)
    inaray
    的输出对我来说并不总是返回
    -1
    。。jQuery的哪个版本?这不是-1…看这里:这对我来说很好:--你没有改变DOM中的顺序,也许这是你的问题。仅供参考,你有两次大小“L”-其中一个是“M”?谢谢!我使用这段代码来更改页面jQuery.each中的列表项(列表项,函数(idx,itm){mylist.append(itm);});谢谢我使用了:jQuery.each(列表项,函数(idx,itm){mylist.append(itm);});