2013-02-14 7 views
18

मैं अपने पन्ने पर निम्नलिखित DIVs है:jQuery में चयन करते समय DOM तत्वों को कैसे सॉर्ट करें?

<div id="pi_div3"> 
    Div 3 
</div> 
<div id="pi_div2"> 
    Div 2 
</div> 
<div id="pi_div1"> 
    Div 1 
</div> 
<div id="pi_div6"> 
    Div 6 
</div> 
<div id="pi_div5"> 
    Div 5 
</div> 
<div id="pi_div4"> 
    Div 4 
</div> 

मैं jQuery कोड $("div[id*=pi_div]") का उपयोग कर divs चयन करने के लिए कोशिश कर रहा हूँ।

जब मैं चयनकर्ता पर प्रत्येक() करता हूं तो मुझे अपनी आईडी के आधार पर क्रमबद्ध करने के लिए divs की आवश्यकता होती है। जब मैं डीआईवी के माध्यम से लूप करता हूं, तो ऑर्डर होना चाहिए: PI_DIV1, PI_DIV2, PI_DIV3, PI_DIV4, PI_DIV5, PI_DIV6। मैं jQuery में ऐसा कैसे कर सकता हूं?

+0

* * के बाद * नहीं * के दौरान क्रमबद्ध करें। 'jQuery (..) 'ऑब्जेक्ट की तरह" सरणी देता है और वहां' Array.sort' है जो कस्टम तुलना फ़ंक्शन ले सकता है। [कैसे हो सकता है-ए-तरह एक सूची-वर्णानुक्रम-का उपयोग कर-jQuery] [1] [1]: –

+0

यहाँ एक हल समान सवाल यह है http: // stackoverflow। कॉम/प्रश्न/1134 9 76/कैसे-मई-i-sort-a-list-alphabetically-use-jquery – Oliver

उत्तर

17

आपके पास कॉल .each()

$("div[id*=pi_div]").sort(function(a,b){ 
    if(a.id < b.id) { 
     return -1; 
    } else { 
     return 1; 
    } 
}).each(function() { console.log($(this).attr("id"));}); 

संपादित पहले .sort() कॉल कर सकते हैं: मैं सोच क्यों अन्य उत्तर आईडी की pi_div हिस्सा हटा रहे थे और मैं समझ गया। यदि आप "स्ट्रिंग्स" pi_div10 के आधार पर तुलना करते हैं तो pi_div2 से पहले आएंगे।

+1

@HRK: आपको किसी और के उत्तर को स्वीकार करना चाहिए, मेरा काम सिर्फ इसलिए कि आपके तत्वों की संख्या सीमित है। मैंने इसे समझाया कि यह सामान्य रूप से क्यों काम नहीं करेगा – koopajah

+0

यह फ़ंक्शन त्रुटिपूर्ण है। यह स्ट्रिंग मानों की तुलना करता है, जो सही परिणाम नहीं बनाएगा। – Tomalak

+0

@ टोमालक> यह उत्तर में स्पष्ट रूप से लिखा गया है और मैंने एचआरके से दूसरे को स्वीकार करने को कहा। मैं इसे एक ही गलती करने से बचने के लिए छोड़ना चाहता था। – koopajah

1

मैं Array.sort विधि का उपयोग करूंगा। http://jsfiddle.net/LJWrg/

var divArr = $("div[id*=pi_div]"); 
function cleanId(id) { 
    return parseInt(id.replace("pi_div",""),10); 
} 
Array.prototype.sort.call(divArr,function(a,b) { 
    return cleanId(a.id) > cleanId(b.id); 
}); 
divArr.each(function(){ 
    console.log(this.id); 
}); 

jQuery इस विधि के साथ आता है आंतरिक रूप में परिभाषित किया गया है, तो आप (लेकिन यह गैर-दस्तावेजी तरीकों का उपयोग करता है) इस के लिए यह छोटा कर सकते हैं http://jsfiddle.net/LJWrg/1/:

var divArr = $("div[id*=pi_div]"); 
function cleanId(id) { 
    return parseInt(id.replace("pi_div",""),10); 
} 
divArr.sort(function(a,b) { 
    return cleanId(a.id) > cleanId(b.id); 
}); 
divArr.each(function(){ 
    console.log(this.id); 
}); 
6
$("div[id^=pi_div]").sort(function (a, b) { 
    return a.id.replace('pi_div', '') > b.id.replace('pi_div', ''); 
}).foo(); 

http://jsfiddle.net/KrX7t/

+0

यह ध्यान देने योग्य है कि jQuery की '.sort()' विधि आंतरिक उपयोग के लिए है और उद्देश्य पर अनियंत्रित है। – Blazemonger

+1

कड़ाई से बोलते हुए, नहीं, यह एक सरणी नहीं है, या इसे 'toArray()' विधि की आवश्यकता नहीं होगी। लेकिन यह एक बतख की तरह एक बतख और quacks की तरह दिखता है। – Blazemonger

+3

@Blazemonger .sort विधि को मूल Array.prototype.sort विधि से विरासत में मिला है। यह jQuery नहीं है, यह बाहरी उपयोग के लिए है, और यह अनियंत्रित है क्योंकि यह jquery का हिस्सा नहीं है। – y3sh

5

आप तो पेज

पर उन्हें स्पष्ट रूप से क्रमबद्ध करना चाहते हैं

~~ पर ध्यान दें जो मानों को पूर्णांक में परिवर्तित करता है, अन्यथा उन्हें स्ट्रिंग के रूप में तुलना की जाएगी।

http://jsfiddle.net/Xjc2T/

+1

मैं 'parseInt' का उपयोग करूंगा या उन्हें' + 'का उपयोग करके संख्याओं में परिवर्तित कर दूंगा। यह थोड़ा और स्पष्ट है। – Blazemonger

+3

@ ब्लेज़मोंगर ठीक है, आप सही हैं, यह वही बात होगी। हालांकि, '~~ 'भी' अपरिभाषित 'और' इन्फिनिटी 'को संभालता है, इसलिए मैं इसका उपयोग करता हूं। – Tomalak

+1

'.appendTo ('# कंटेनर') जोड़ने के लिए धन्यवाद, जो डीओएम तीन में ऑर्डर सॉर्ट ऑर्डर अपडेट करता है। –

संबंधित मुद्दे