मैं खुद ऐसा करना चाह रहा था, और मैं किसी भी तरह से दिए गए जवाबों से संतुष्ट नहीं था, क्योंकि मेरा मानना है कि वे द्विघात समय के हैं, और मुझे सैकड़ों वस्तुओं की सूची में यह करने की आवश्यकता है।
मैंने जक्वेरी का विस्तार किया, और मेरे समाधान में जक्वेरी का उपयोग किया गया , लेकिन सीधे जावास्क्रिप्ट का उपयोग करने के लिए आसानी से संशोधित किया जा सकता था।
मैं केवल प्रत्येक आइटम को दो बार एक्सेस करता हूं, और एक लीनियरथमिक सॉर्ट करता हूं, इसलिए मुझे लगता है, बड़े डेटासेट पर बहुत तेजी से काम करना चाहिए, हालांकि मैं स्वतंत्र रूप से स्वीकार करता हूं कि मुझसे गलती हो सकती है:
sortList: function() {
if (!this.is("ul") || !this.length)
return
else {
var getData = function(ul) {
var lis = ul.find('li'),
liData = {
liTexts : []
};
for(var i = 0; i<lis.length; i++){
var key = $(lis[i]).text().trim().toLowerCase().replace(/\s/g, ""),
attrs = lis[i].attributes;
liData[key] = {},
liData[key]['attrs'] = {},
liData[key]['html'] = $(lis[i]).html();
liData.liTexts.push(key);
for (var j = 0; j < attrs.length; j++) {
liData[key]['attrs'][attrs[j].nodeName] = attrs[j].nodeValue;
}
}
return liData;
},
processData = function (obj){
var sortedTexts = obj.liTexts.sort(),
htmlStr = '';
for(var i = 0; i < sortedTexts.length; i++){
var attrsStr = '',
attributes = obj[sortedTexts[i]].attrs;
for(attr in attributes){
var str = attr + "=\'" + attributes[attr] + "\' ";
attrsStr += str;
}
htmlStr += "<li "+ attrsStr + ">" + obj[sortedTexts[i]].html+"</li>";
}
return htmlStr;
};
this.html(processData(getData(this)));
}
}