我有以下代码适用于Firefox和Chrome,但使用Microsoft Edge(默认设置)时,列表项不会被排序 - 它们将保持无序状态。我使用的是MS Edge 20.10240.16384.0。
有没有人见过这个问题并找到了解决方案? (这里的id是ul的容器)
$( id + ' li' ).sort(function ( a, b ) {
return parseFloat( $( a ).attr( "id" ).replace( 'page', '' ) )
> parseFloat( $( b ).attr( "id" ).replace( 'page', '' ) );
}).appendTo( id + ' ul' );
JS小提琴示例:https://jsfiddle.net/c1d8caa5/2/
答案 0 :(得分:3)
此代码利用了本机Array.prototype.sort
方法,该方法在ECMAScript标准的22.1.3.24部分中进行了描述。此方法接受单个 comparefn 参数:
如果 comparefn 未定义,则它应该是一个接受两个参数x和y的函数,如果x<
,则返回负值。 y,零如果x = y,或正值,如果x>年。 (重点补充)
因此,请确保比较功能返回-1
,0
或1
。此外,您可以从另一个中减去一个数字,这将产生负数,零或正数,从而满足要求。
虽然Microsoft Edge可能不会违反此标准,但如果其他主流浏览器更松散地实现此功能(接受布尔值),而Edge没有,则可能会提出互操作问题并查看是否应该使用Edge对齐。
我在Edge团队工作,并会提交一个问题供我考虑。