Chr*_*aan 7 javascript sorting nodelist
我认为应该是一个直截了当的问题; 让我快速解释一下:
在我的JavaScript中,请food.xml阅读:
getMenuXml.open("GET","food.xml",false);
getMenuXml.send();
xmlDoc=getMenuXml.responseXML;
xmlFoodList = xmlDoc.getElementsByTagName("food");
Run Code Online (Sandbox Code Playgroud)
所以现在我有一个xmlFoodList包含所有食物元素的NodeList .到目前为止很棒.问题是我想根据<category>里面的元素对节点进行排序.我可以读到:
xmlFoodList[i].getElementsByTagName("category")[0].childNodes[0].nodeValue
Run Code Online (Sandbox Code Playgroud)
稍后在我的代码中,食物项目显示在列表中,正如您所期望的那样,我希望将同一类别的食物列在一起.所以,我的问题是:如何xmlFoodList根据类别重新排序节点?
注意:我无法更改food.xml进入,并且我不想编辑我的后期代码来进行排序,因为列表已填充.我不想将NodeList转换为数组,因为我不得不重写很多以后的代码.性能实际上并不是一个问题,因此您可以随心所欲地克隆/嵌套循环.谢谢你的时间.
and*_*wmu 12
如果先将它们转换为数组,则可以对NodeList的元素进行排序:
var foods = xmlDoc.getElementsByTagName("food");
var foodsArray = Array.prototype.slice.call(foods, 0);
Run Code Online (Sandbox Code Playgroud)
然后你可以使用这个sort方法:
foodsArray.sort(function(a,b) {
var aCat = a.getElementsByTagName("category")[0].childNodes[0].nodeValue;
var bCat = b.getElementsByTagName("category")[0].childNodes[0].nodeValue;
if (aCat > bCat) return 1;
if (aCat < bCat) return -1;
return 0;
});
Run Code Online (Sandbox Code Playgroud)
这在很大程度上取决于您的XML架构 - 例如,如果您的食物属于多个类别,那么它们只能按照上面代码中的第一个类别进行排序.
| 归档时间: |
|
| 查看次数: |
14062 次 |
| 最近记录: |