我有一個javascript函數中的一行,它根據另一個字符串數組的順序對一個對象數組進行排序。這是在Firefox的工作,但不是在IE瀏覽器,我不知道爲什麼。以下是我的數據在IE7中進入排序調用的樣子。 (爲了說明這一點,我使用了三個項目的數組)。JS排序在Firefox中工作,但不是IE - 不能解決爲什麼
//cherry first then the rest in alphabetical order
originalData = ['cherry','apple','banana','clementine','nectarine','plum']
//data before sorting - note how clementine is second item - we wan to to to be after apple and banana
csub = [
{"value":"cherry","data":["cherry"],"result":"cherry"},
{"value":"clementine","data":["clementine"],"result":"clementine"},
{"value":"apple","data":["apple"],"result":"apple"},
{"value":"banana","data":["banana"],"result":"banana"},
{"value":"nectarine","data":["nectarine"],"result":"nectarine"},
{"value":"plum","data":["plum"],"result":"plum"}
]
//after sorting, csub has been rearranged but still isn't right: clementine is before banana. in FF it's in the right place.
csubSorted = [
{"value":"cherry","data":["cherry"],"result":"cherry"},
{"value":"apple","data":["apple"],"result":"apple"},
{"value":"clementine","data":["clementine"],"result":"clementine"},
{"value":"banana","data":["banana"],"result":"banana"},
{"value":"nectarine","data":["nectarine"],"result":"nectarine"},
{"value":"plum","data":["plum"],"result":"plum"}
]
下面是實際的排序代碼:
csubSorted = csub.sort(function(a,b){ return (originalData.indexOf(a.value) > originalData.indexOf(b.value)); });
任何人都可以明白爲什麼這是行不通的?基本的JavaScript排序功能不是跨瀏覽器兼容的?我可以用不同的方式來做到這一點(例如與jQuery),這將是跨瀏覽器?
感謝您的任何意見 - 最大
編輯 - 這也失敗在Safari和Chrome的工作 - 換句話說,它似乎只在Firefox工作。
已解決 - 感謝Tim Down。 我實際上讓我的代碼更簡單,因爲我意識到我需要的順序總是「返回數組中的第一項,然後是使用.value排序的數組的其餘部分」。所以,我因此改變了我的代碼:
first = csub.shift();
csubSorted = csub.sort(function(a,b){
return (a.value > b.value);
});
csubSorted.unshift(first);
但是,它仍然不能正常工作。然後Tim(下面)指出排序期望從函數返回-1,0或1,不是真或假,這是我的代碼返回的。很顯然,firefox可以讓你擺脫這種困境,但其他瀏覽器卻沒有。所需要的只是將真或假轉化爲1和-1(我不擔心兩個字符串都是字符串的情況,實際上這會返回-1,這不會對反正排序):
first = csub.shift();
csubSorted = csub.sort(function(a,b){
return (a.value > b.value ? 1 : -1);
});
csubSorted.unshift(first);
添還告訴我,array.indexOf()沒有在IE瀏覽器的,即使我不在這裏使用它是煩人支持更多的我在其他位使用它的代碼。 Goddamit。有沒有一個API頁面明確列出了跨瀏覽器兼容的javscript API?
您可以在IE上通過取消選中disable debugging.search來調試您的代碼,以在IE中進行調試。 – Salil 2010-06-02 09:39:30