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);});