jQuery each data()返回不同的结果Firefox与Chrome,如何修复?

jQuery each data()返回不同的结果Firefox与Chrome,如何修复?,jquery,Jquery,我使用这段代码来收集数据(),但它在chrome中不起作用,因为它的顺序相反,我如何才能使结果匹配 这是相同的代码。我只是在chrome/firefox上得到了不同的结果,这使得它无法在chrome中运行 /* get checked filters */ strJson = '{'; jQuery('.uag-filter-option').each( function() { if (jQuery(this).hasClass('checked')) { jQuery

我使用这段代码来收集数据(),但它在chrome中不起作用,因为它的顺序相反,我如何才能使结果匹配

这是相同的代码。我只是在chrome/firefox上得到了不同的结果,这使得它无法在chrome中运行

/* get checked filters */
strJson = '{';
jQuery('.uag-filter-option').each( function() {
    if (jQuery(this).hasClass('checked')) {
        jQuery.each(jQuery(this).data(), function(i, v) {
            strJson += i + ":'" + v + "',";
        });
    }
});
strJson = strJson.slice(0, -1);
strJson += '}';

alert(strJson);
在FireFox中,我得到:

{sort:\'sortbydate\',method:\'sortby\'}
在Chrome中,我得到:

{method:\'sortby\',sort:\'sortbydate\'}
如何在Chrome中获得与Firefox相同的结果?我想这就是data()在不同浏览器中的处理方式

以下是包含数据的锚点:

<a href="#" class="uag-filter-option" data-method="sortby" data-sort="sortbydate">date</a>

有什么想法吗

似乎:


当使用jQuery.data()访问数据属性时,Firefox和IE中属性的顺序是相反的。如何在所有浏览器中实现匹配?

您真的不应该关心属性的顺序。您还应该使用
JSON.stringify()
而不是手动序列化结果:

strJson = JSON.stringify(jQuery('.uag-filter-option.checked').data());

将获取的数据放在数组中而不是字符串中,然后按字母顺序排序怎么样?然后从数组中构建字符串,不?

您不必担心json对象的键顺序,因为您应该根据键来检索值,所以您得到的是相同的数据,只是元素的顺序不同?如果是这样的话,这很重要,只需对结果对象键进行排序。如果不是通过索引号访问对象值,那么顺序又有什么关系呢
obj.method
两种方法都是相同的。如果顺序重要,请使用数组。对象没有保证的排序顺序。为什么要构建自己的JSON?这通常是个坏主意!为什么不直接使用
JSON.stringify($('.uag filter option').data()
?没有帮助!我的主要问题是我需要密钥(第一个),它们在所有浏览器中都必须是有序的。如果有人有办法让它们看起来像fiefox中的一样,那就能解决我的问题。