Javascript 按浏览器差异下划线js_
我看到select的optgroup和选项的呈现顺序出现了一些奇怪的行为。我有一些数据用于使用下划线js\u grouby函数在select和options中构建optgroup。Firefox呈现数据的方式与我对json、Chrome和IE的排序相反 Html:Javascript 按浏览器差异下划线js_,javascript,jquery,underscore.js,Javascript,Jquery,Underscore.js,我看到select的optgroup和选项的呈现顺序出现了一些奇怪的行为。我有一些数据用于使用下划线js\u grouby函数在select和options中构建optgroup。Firefox呈现数据的方式与我对json、Chrome和IE的排序相反 Html: 全部的 JavaScript: $(document).ready(function() { var dataresults = [{"MonthName":"April","Month":4,"Year":2014,"Da
全部的
JavaScript:
$(document).ready(function() {
var dataresults = [{"MonthName":"April","Month":4,"Year":2014,"Date":"\/Date(1397451600000)\/"},{"MonthName":"January","Month":1,"Year":2014,"Date":"\/Date(1388556000000)\/"},{"MonthName":"November","Month":11,"Year":2013,"Date":"\/Date(1384322400000)\/"},{"MonthName":"July","Month":7,"Year":2013,"Date":"\/Date(1373864400000)\/"}];
BindYearDropDown(dataresults);
function BindYearDropDown(data)
{
var groupData = _.groupBy(data, function (obj) {
return obj.Year;
});
var optGroups = [];
for (var key in groupData) {
if (groupData.hasOwnProperty(key)) {
var optGroup = $("<optgroup></optgroup>");
optGroup.attr("label", key);
optGroup.attr("id", key);
var currentGroup = groupData[key];
for (var i = 0; i < currentGroup.length; i++) {
$("<option />").attr("value", currentGroup[i].Month).html(currentGroup[i].MonthName).appendTo(optGroup);
}
optGroups.push(optGroup);
}
}
//optGroups.reverse();
for (var i = 0; i < optGroups.length; i++) {
$('#dropdownlist').append(optGroups[i]);
}
};
$(文档).ready(函数(){
var dataresults=[{“MonthName”:“四月”、“月”:4,“年”:2014,“日期”:“\/日期(1397451600000)\/”,{“MonthName”:“一月”、“月”:1,“年”:2014,“日期”:“\/日期(138855600000)\/”,{“MonthName”:“十一月”、“月”:11,“年”:2013,“日期”:“\/日期(1384322400000)\/”,{“MonthName”:“七月”、“月”:7,“年”:2013,“日期”:“\/日期(1373864400000)\/”;
BindYear下拉列表(数据结果);
功能下拉列表(数据)
{
var groupData=u.groupBy(数据,函数(obj){
返回目标年;
});
var optGroups=[];
for(groupData中的var键){
if(groupData.hasOwnProperty(键)){
var optGroup=$(“”);
optGroup.attr(“标签”,键);
optGroup.attr(“id”,键);
var currentGroup=组数据[键];
对于(var i=0;i
FireFox结果:(这是我希望数据显示的方式)
铬结果:
IE11结果:
提前感谢,
KC如果您真的想使用您提供的结构中的数据,您可以创建一个年份列表,然后对其进行排序。否则,我建议使用@mu太短的方法
JavaScript对象。您使用了错误的数据结构,如果您需要按特定顺序处理对象,则必须使用数组并根据需要对该数组进行排序。
.groupBy
返回一个对象,而不是数组。感谢您指出这一点,FF处理JS对象是否与其他浏览器不同?我真正的返回数据的服务需要as parm和FF中的排序方向会根据asc或desc返回的数据的基数而变化。@KC。在本文中,它显示了偶数对象顺序依赖于操作系统。Linux上的Chrome将产生与Winows上的Chrome不同的结果!我想,现在,您必须自己排序结果。AFAIK大多数浏览器使用插入顺序b但这并不能保证。不要依赖于经验性的“这个浏览器做什么?”检查,从规范开始,调整以解决浏览器问题。
$(document).ready(function() {
var dataresults = [{"MonthName":"April","Month":4,"Year":2014,"Date":"\/Date(1397451600000)\/"},{"MonthName":"January","Month":1,"Year":2014,"Date":"\/Date(1388556000000)\/"},{"MonthName":"November","Month":11,"Year":2013,"Date":"\/Date(1384322400000)\/"},{"MonthName":"July","Month":7,"Year":2013,"Date":"\/Date(1373864400000)\/"}];
BindYearDropDown(dataresults);
function BindYearDropDown(data)
{
var groupData = _.groupBy(data, function (obj) {
return obj.Year;
});
var optGroups = [];
for (var key in groupData) {
if (groupData.hasOwnProperty(key)) {
var optGroup = $("<optgroup></optgroup>");
optGroup.attr("label", key);
optGroup.attr("id", key);
var currentGroup = groupData[key];
for (var i = 0; i < currentGroup.length; i++) {
$("<option />").attr("value", currentGroup[i].Month).html(currentGroup[i].MonthName).appendTo(optGroup);
}
optGroups.push(optGroup);
}
}
//optGroups.reverse();
for (var i = 0; i < optGroups.length; i++) {
$('#dropdownlist').append(optGroups[i]);
}
};
/* reusable descending sort function */
function sortDescending(value) {
return value * -1;
};
...
var groupData = _.groupBy(data, function (obj) {
return obj.Year;
});
/* Sort the years in descending order */
var years = _.sortBy(_.keys(groupData), sortDescending);
var optGroups = [];
for (var index in years) {
var key = years[index];
...