2013-02-05 18 views
6

मैंने हाल ही में एक कोड नमूना भर दिया है जिसका उपयोग मैंने किया था, और मैं इसका उपयोग करने में सक्षम था, लेकिन मुझे बिल्कुल समझ में नहीं आया कि क्या हो रहा था, और मुझे यह पसंद नहीं आया।

.sortElements(function(a, b){ 
    return $.text([a]) > $.text([b]) ? 
     inverse ? -1 : 1 
     : inverse ? 1 : -1; 
} 

मैं जानता हूँ कि इस समारोह निर्णय लेने से किया जाता है कि जो तत्व पहले ए और बी का हल किया जाना चाहिए, और मुझे पता है कि उलटा सॉर्ट क्रम तय करना है कि, लेकिन मैं न:

यहाँ कोड का हिस्सा है पता है कि $ .text ([ए]) क्या कर रहा है। क्या यह "ए" को पाठ प्रकार की तरह parseInt (ए) और Date.parse (ए) के रूप में पार्स कर रहा है?

मैंने Google से पूछा है, और यह मुझे कुछ भी नहीं बताएगा, संभवतः क्योंकि यह प्रतीकों और बिंदुओं की खोज करना पसंद नहीं करता है, या संभवतः क्योंकि मुझे नहीं पता कि Google का उपयोग प्रतीकों और बिंदुओं को खोजने के लिए कैसे किया जाए। मैंने jQuery साइट पर भी देखा है और मुझे जो भी मिला है वह $ (selector) .text()/$ (selector) .text (newText) फ़ंक्शन है।

यहाँ jsFiddle मैं अपने कोड आधारित कर रहा हूँ से है: http://jsfiddle.net/gFzCk/

+3

आप किस प्लग-इन का उपयोग कर रहे हैं? jQuery में 'jQuery.text' फ़ंक्शन नहीं है (कम से कम, एक * दस्तावेज * एक नहीं)। (इसमें jQuery * इंस्टेंस * का 'टेक्स्ट' फ़ंक्शन है, लेकिन यह अलग है।) –

+0

यह चर के साथ एक सरणी बना रहा है क्योंकि यह केवल मूल्य है - एक बहुत अच्छा सवाल क्यों है। – h2ooooooo

+3

ऐसा लगता है कि यह jQuery में ऑब्जेक्ट से टेक्स्ट प्राप्त करने के लिए jQuery में एक अनियंत्रित फ़ंक्शन है, जिसमें jQuery ऑब्जेक्ट की आवश्यकता नहीं है। तो, मान लीजिए कि 'ए' कुछ पाठ के साथ एक डोम नोड है, '$ (ए) .text() 'और' $ .text ([a]) 'समकक्ष हैं। [यह jsFiddle उदाहरण] देखें (http://jsfiddle.net/eCwRZ/)। –

उत्तर

7

jQuery source निरीक्षण का पता चलता है कि $(selector).text() है कि आप से परिचित हैं, $.text आंतरिक रूप से उपयोग करता है:

jQuery.fn.extend({ 
    text: function(value) { 
     return jQuery.access(this, function(value) { 
      return value === undefined ? 
       jQuery.text(this) : 
       this.empty().append((this[0] && this[0].ownerDocument || document).createTextNode(value)); 
     }, null, value, arguments.length); 
    }, 

यह एक अनियंत्रित फ़ंक्शन है (जिसका अर्थ है कि आगे के jQuery संशोधन इसे बिना सूचित किए, इच्छानुसार छोड़ सकते हैं)। आप इस तरह के रूप में अपनी परिभाषा मिल जाएगा:

jQuery.text = Sizzle.getText; 

Sizzle.getText, बारी में, के रूप में "डोम नोड्स की एक सरणी का पाठ मान पुन: प्राप्त करने के लिए उपयोगिता समारोह" प्रलेखित है। Sizzle.getText के रूप में देखकर एक प्रलेखित सुविधा है, मैं jQuery शॉर्टंड की बजाय इसका उपयोग करने की अनुशंसा करता हूं, क्योंकि मुझे उम्मीद है कि jQuery जल्द ही कभी भी सिज़ल को छोड़ने की उम्मीद नहीं करेगा।

यह फ़ंक्शन, कोड का वह टुकड़ा है जो एक डोम नोड की टेक्स्ट सामग्री उत्पन्न करता है। आपकी सॉर्टिंग विधि उनकी टेक्स्ट सामग्री के वर्णमाला क्रम से DOM नोड्स को सॉर्ट कर रही है। मुझे नहीं पता कि लेखक ने तत्काल तत्व (a) को तुरंत पास करने के बजाय, केवल एक तत्व ([a]) युक्त सरणी का पाठ प्राप्त करने का निर्णय लिया है, जो समान रूप से अच्छी तरह से काम करेगा।

9

jQuery.text.text() विधि के लिए implementation के लिए भारी उठाने करता है - यह .text() के लिए मुख्य कार्यक्षमता के साथ एक गैर-दस्तावेजी समारोह हो रहा है, लेकिन लापता कुछ jQuery पॉलिश।

यह "imported" from Sizzle है, जहां यह Sizzle.getText के रूप में दिखाई देता है।

+0

+1 प्रश्न के लिए इस पहेली को जोड़ने के लिए टेक्स्ट() के बजाय इसका उपयोग करने का कोई कारण है? –

+0

@ रॉयनामिर: ठीक है, सैद्धांतिक रूप से आप इसे '.text()' पर कॉल करने के लिए एक jQuery ऑब्जेक्ट बनाने के ऊपरी भाग के बिना किसी डोम नोड के पाठ को पुनर्प्राप्त करने के लिए उपयोग कर सकते हैं। लेकिन व्यावहारिक रूप से ... मुझे नहीं लगता कि यह बहुत लाभ के रूप में है। – Jon

1

यदि उपरोक्त कोड कुछ उपयोगी करता है (= jQuery प्रलेखन के अनुसार यह कोई संकेत नहीं है), तो यह शायद .text() पर a और b पर कॉल करता है।

मुझे आश्चर्य है कि लेखक ने $(a).text() का उपयोग क्यों नहीं किया क्योंकि ऐसा ही करना चाहिए। हो सकता है कि कोड भी कोई फर्क नहीं पड़ता कि क्या काम करता है a एक jQuery लिपटे नोड है या नहीं: -/

2

अपने जेएसफ़िल्ड को देखने के बाद ऐसा प्रतीत होता है कि यह एक तत्व से पाठ प्राप्त करने के लिए एक कार्य है, सिमुलेटर।पाठ()

console.log(a)<td>28/02/2013</td>

लॉग इन किया जबकि

console.log($.text[a]) लॉग इन 28/02/2013

0

सबसे पहले, कोष्ठक। यदि a एक तत्व है, [a] एक तत्व सरणी है, इसलिए $.text(...) पर कॉल पैरामीटर के रूप में एक सरणी पारित कर रहे हैं।

मुझे jQuery.text के बारे में कोई दस्तावेज नहीं मिला लेकिन केवल jQuery.fn.text के लिए। हालांकि, आप देख सकते हैं कि jQuery.text के कार्यान्वयन पैरामीटर के साथ-साथ स्केलर मानों के रूप में सरणी को नियंत्रित करता है।

इस मामले में, $.text([a]) शायद $.text(a) जैसा ही है।

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