2016-04-15 11 views
16

मैं इस ES6 कोड के बाद मैं कोलाहल के साथ यह संकलन this अंदर .each की कॉल वापस undefined हो जाता है ES5 करने के लिए है,। मैं इस समस्या को कैसे हल करूं?jQuery चाहते प्रत्येक() ES6 तीर कार्यों के साथ समारोह

let mediaBoxes = $(".now-thumbnail"); 
let titles = []; 
mediaBoxes.each(() => { 
     let obj = { 
       index: i, 
       title: $(this).find(".now-thumbnail-bottomtext").text().trim() 
      }; 
    titles.push(obj); 
}); 

उत्तर

23

मेरे समाधान बिल्कुल this का उपयोग नहीं करने के लिए है, लेकिन चर कि कॉलबैक फ़ंक्शन पर पारित कर रहे हैं का उपयोग करें। पहला सूचकांक है और दूसरा आपको डीओएम तत्व देता है।

let mediaBoxes = $(".now-thumbnail"); 
let titles = []; 
mediaBoxes.each((index, element) => { 
       let obj = { 
        index: index, 
        title: $(element).find(".now-thumbnail-bottomtext").text().trim() 
       }; 
       titles.push(obj); 
}); 
19

है ऐसा इसलिए है क्योंकि this का मतलब तीर कार्यों में समान नहीं है।

this

तीर कार्यों संलग्न संदर्भ से यह मान पर कब्जा,

each() समारोह कॉलबैक करने के लिए दूसरा तर्क के रूप में तत्व से गुजरता है।

लेकिन आप के लिए एक अधिक उपयुक्त समाधान भी उपयोग करने के लिए .map()each() के बजाय

let mediaBoxes = $(".now-thumbnail"); 
let titles = mediaBoxes.map((i, el) => { 
    return { 
    index: i, 
    title: $(el).find(".now-thumbnail-bottomtext").text().trim() 
    }; 
}).get(); 
+0

मैं यही सोच रहा था हो जाएगा। 'शीर्षक = $ ('। अब-थंबनेल ')। नक्शा ((अनुक्रमणिका, तत्व) => ({ अनुक्रमणिका: अनुक्रमणिका, शीर्षक: $ (तत्व)। ढूँढें ("अब-थंबनेल-नीचे टेक्स्ट")। टेक्स्ट()। ट्रिम() })) प्राप्त करें(); ' – Tushar

+0

@ टुशर अगर सामग्री बहुत बड़ी है तो मुझे इसे ब्लॉक में तोड़ना पसंद है –

+2

मैं यह भी जोड़ूंगा कि यहां तीर फ़ंक्शंस की आवश्यकता नहीं है बस संक्षिप्त वाक्यविन्यास के लिए और कुछ भी वापस नहीं किया जा रहा है। अनाम कार्यों का उपयोग किया जा सकता है जहां '$ (यह)' element_ को सही करने के लिए इंगित करेगा। – Tushar

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