对文本和数字进行排序可以在Firefox和Chrome中使用,但不能在Safari中使用
Order/Sort text and numbers works in Firefox and Chrome, but not Safari
我编写了一个jQuery脚本,按年份对结果进行排序,这在大多数浏览器中都能正常工作。对于safari浏览器,结果如下所示:
2006所有200720082009等。
当然列表应该是这样的
所有2006200720082009等。
我不明白为什么结果各不相同。
var li = $('#filter .milo-filter');
li.sort(function(a, b) {
if(parseInt($(a).text()) > parseInt($(b).text()))
return 1;
else return -1;
});
$('#filter').empty().html(li);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
<div class="milo-portfolio-filters clearfix">
<ul data-option-key="filter" id="filter">
<li class="milo-filter">
<a class="selected " title="All" data-option-value="*" href="#">All</a>
</li>
<li class="milo-filter">
<a title="2015" data-option-value=".2015" href="#">2015</a>
</li>
<li class="milo-filter">
<a title="2011" data-option-value=".2011" href="#">2011</a>
</li>
<li class="milo-filter">
<a title="2006" data-option-value=".2006" href="#">2006</a>
</li>
<li class="milo-filter">
<a title="2007" data-option-value=".2007" href="#">2007</a>
</li>
<li class="milo-filter">
<a title="2008" data-option-value=".2008" href="#">2008</a>
</li>
<li class="milo-filter">
<a title="2013" data-option-value=".2013" href="#">2013</a>
</li>
<li class="milo-filter">
<a title="2010" data-option-value=".2010" href="#">2010</a>
</li>
<li class="milo-filter">
<a title="2009" data-option-value=".2009" href="#">2009</a>
</li>
<li class="milo-filter">
<a title="2014" data-option-value=".2014" href="#">2014</a>
</li>
<li class="milo-filter">
<a title="2012" data-option-value=".2012" href="#">2012</a>
</li>
</ul>
</div>
这里是一个Codepen,以便更好地理解。http://codepen.io/scooma/pen/yJKxPJ
当两个成员之间没有绝对相等的状态时,浏览器不需要按照你认为应该的顺序给出它们(因为你并不真正知道浏览器将数组成员发送给排序函数的确切顺序)。
对于代码中的问题,如果您检查parseInt("All") < parseInt(2015)
和parseInt("All") > parseInt(2015)
,您将看到它们都返回false。
下面是一个示例,代码完全相同,但返回值在chrome和firefox中是不同的(由于确切的"问题"):
a = [1, 2, 3, 41, 42]
a.sort(function(a, b) {
if (a == 41) {
a = 4;
}
if (b == 41) {
b = 4;
}
if (a == 42) {
a = 4;
}
if (b == 42) {
b = 4;
}
if (a > b) {
return 1;
}
return -1;
})
console.log(a)
的解决方案Chrome中的返回值:[1,2,3,41,42]
Safari中的返回值:[1,2,3,42,41]
解决方案是检查您的值是否为文本,并根据该值返回相关值(1/-1):
var li = $('#filter .milo-filter');
li.sort(function(a, b) {
if(isNaN(parseInt($(a).text()))) {
// If we can't parse the first element as a number, it is probably text, and it should appear first
return -1;
}
if(isNaN(parseInt($(b).text()))) {
// If we can't parse the second element as a number, it is probably text, and it should appear last
return 1;
}
if (parseInt($(a).text()) > parseInt($(b).text())) {
return 1;
}
return -1;
});
$('#filter').empty().html(li);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"></script>
<div class="milo-portfolio-filters clearfix">
<ul data-option-key="filter" id="filter">
<li class="milo-filter">
<a class="selected " title="All" data-option-value="*" href="#">All</a>
</li>
<li class="milo-filter">
<a title="2015" data-option-value=".2015" href="#">2015</a>
</li>
<li class="milo-filter">
<a title="2011" data-option-value=".2011" href="#">2011</a>
</li>
<li class="milo-filter">
<a title="2006" data-option-value=".2006" href="#">2006</a>
</li>
<li class="milo-filter">
<a title="2007" data-option-value=".2007" href="#">2007</a>
</li>
<li class="milo-filter">
<a title="2008" data-option-value=".2008" href="#">2008</a>
</li>
<li class="milo-filter">
<a title="2013" data-option-value=".2013" href="#">2013</a>
</li>
<li class="milo-filter">
<a title="2010" data-option-value=".2010" href="#">2010</a>
</li>
<li class="milo-filter">
<a title="2009" data-option-value=".2009" href="#">2009</a>
</li>
<li class="milo-filter">
<a title="2014" data-option-value=".2014" href="#">2014</a>
</li>
<li class="milo-filter">
<a title="2012" data-option-value=".2012" href="#">2012</a>
</li>
</ul>
</div>
相关文章:
- JS代码在jsbin中有效,在jsfiddle或Chrome/Safari中无效
- JQuery图像大小计算没有'不能在Chrome/Safari中工作
- 在Chrome/Safari中使用History.pushState重复历史记录条目
- getComputedStyle报告Chrome / Safari / Firefox和IE11之间的不同高度
- 下载画布图像 png Chrome/Safari
- jquery javascript chrome/safari issue
- 外部js click函数在Chrome / Safari中不起作用
- Javascript FF Slow Chrome/Safari FAST
- 创建 Chrome/Safari 扩展程序的先决条件
- Ajax 调用在 chrome/safari 中工作,但在 ff 和 ie 中失败
- Ajax在Chrome / Safari中提交作品,但不能在Firefox / IE中提交作品
- JQuery easySlider 在 Chrome/Safari 中不起作用
- Using onafterprint in Chrome & Safari
- 有了弹性弹跳,Chrome/Safari知道我的手指何时离开触控板.JS知道吗
- 导航栏在移动上折叠,滚动chrome/safari
- Chrome/Safari(webkit)中的JQuery Overlay无法进行更改
- 代码与Firefox一起工作,但不与Chrome, Safari
- jquery脚本不工作在chrome, safari和部分opera, FF是可以的
- 如何在webkit浏览器(chrome/safari)中以编程方式打开新选项卡
- 在Chrome/Safari中剥离表:tr:n -child td的bug