2013-04-24 7 views
26

मैं काम पर एक प्लेटफॉर्म से के लिए इस छोटे से बातचीत बनाया है में काम नहीं कर - http://jsfiddle.net/S79qp/426/Jquery - .forEach() IE8

यह ठीक काम करता है में सभी ब्राउज़रों अलग IE8 के रूप में। यह इस खंड है कि यह साथ ... समस्या हो रही है हो रहा है जब मैं सांत्वना चलाने

Array.prototype.forEach.call(l, function(item) { 
     a.push(jQuery(item).text()); 
    }); 

कोई तो मैं यह आवश्यक संस्करणों के लिए संगत कर सकते हैं मुझे एक IE8 अनुकूल विकल्प दिखा सकते हैं?

+1

प्रोटोटाइप –

+2

@ सरफराज के बजाय आप jQuery का उपयोग क्यों नहीं करते: इस मामले में 'प्रोटोटाइप' लाइब्रेरी नहीं है, लेकिन जावास्क्रिप्ट में कीवर्ड है। – Guffa

+1

@ सरफराज भी प्रोटोटाइप का उपयोग करने में क्या गलत है? – rickyduck

उत्तर

35

उपयोग jQuery.each method:

jQuery.each(l, function(index, item){ 
    a.push(jQuery(item).text()); 
}); 

यदि लक्ष्य सरणी शुरू से ही खाली है, तो आप इसके बजाए लिए jQuery.map method उपयोग कर सकते हैं:

var a = jQuery.map(l, function(item){ 
    return jQuery(item).text(); 
}); 
+0

अब कंसोल कह रहा है कि यह अनुक्रमणिका = a.indexOf (वर्तमान) + 1 का समर्थन नहीं करता है; अगर (सूचकांक <0 || अनुक्रमणिका> = l.length) { अनुक्रमणिका = 0; @Guffa } –

+0

@ मिलो-जे: 'Array.indexOf' हाल ही में एक और विधि जोड़ा गया है। इसके बजाए 'jQuery.inArray' विधि का प्रयोग करें। http://api.jquery.com/jQuery।inArray/ – Guffa

+0

मैंने इसे करने का प्रयास किया है लेकिन यह काम नहीं करेगा। क्या आप एक नज़र देख सकते हैं? http://jsfiddle.net/S79qp/428/ @Guffa –

2

दरअसल foreach विधि IE9 से ही उपलब्ध है। पुराने ब्राउज़रों को समर्थन प्रदान करने के लिए आपको jQuery संस्करण "प्रत्येक()" का उपयोग करना चाहिए।

41

यदि आप केवल इतना चाहते हैं IE8 में forEach() है:

if (typeof Array.prototype.forEach != 'function') { 
    Array.prototype.forEach = function(callback){ 
     for (var i = 0; i < this.length; i++){ 
     callback.apply(this, [this[i], i, this]); 
     } 
    }; 
} 

यह किसी भी ब्राउज़र है कि यह निर्मित नहीं है में as expected व्यवहार करेगा।

+3

ऊपर इसे बड़े पैमाने पर प्रोजेक्ट में आने के बाद वोट दिया गया, कुछ बार यह सही और सुरक्षित है जो कोड को सही करने की कोशिश करने के बजाय दोषपूर्ण ब्राउज़र को सही करने में मदद करता है जो वास्तव में दोषपूर्ण नहीं है – Mayhem

+1

यह शानदार है! – Anant

+0

प्रदान किए गए लिंक पर पॉलीफिल का उपयोग करना बेहतर होगा। वह कोड सही हो गया है। –

2

foreach आईई 8 में समर्थित नहीं है, बजाय आप एक नियमित पाश का उपयोग कर सकते हैं:

for (var i = 0; i < myArray.length; i++) { 
    // code 
} 
1

मैं IE8 के साथ एक ही मुद्दा था और यहाँ है कि कैसे मैं इसे हल!

सबसे पहले लूप करना चाहते थे और JSON सरणी ऑब्जेक्ट से डेटा प्राप्त करना चाहते थे। जो Firex, क्रोम और नवीनतम आईई लेकिन नहीं IE8 में अच्छी तरह से काम कर रहा है मूल की नजर डालें

  data.children.forEach(function(item) { 
 
       //javascript: console.log(item); 
 
       console.log(data.children); 
 
       attachRel(item, '1' + (data.children.length > 1 ? 1 : 0)); 
 
      });

यहाँ समाधान है कि मैं संघर्ष के एक लंबे दिन के बाद विकसित की है

  $.each(data.children, function() { 
 

 
       attachRel(this, '1' + (data.children.length > 1 ? 1 : 0)); 
 
      });