IE 11 में कोड नहीं चल रहा है, क्रोम में ठीक काम करता है


156

निम्न कोड क्रोम में एक समस्या के बिना चलाया जा सकता है, लेकिन इंटरनेट एक्सप्लोरर 11 में निम्न त्रुटि को फेंकता है।

ऑब्जेक्ट संपत्ति या विधि का समर्थन नहीं करता है 'प्रारंभ'

मैं एक चर में तत्व की आईडी संग्रहीत कर रहा हूं। मामला क्या है?

function changeClass(elId) {
  var array = document.getElementsByTagName('td');
  
  for (var a = 0; a < array.length; a++) {
    var str = array[a].id;
    
    if (str.startsWith('REP')) {
      if (str == elId) {
        array[a].style.backgroundColor = "Blue";
        array[a].style.color = "white";
      } else {
        array[a].style.backgroundColor = "";
        array[a].style.color = "";
      }
    } else if (str.startsWith('D')) {
      if (str == elId) {
        array[a].style.backgroundColor = "Blue";
        array[a].style.color = "white";
      } else {
        array[a].style.backgroundColor = "";
        array[a].style.color = "";
      }
    }
  }
}
<table>
  <tr>
    <td id="REP1" onclick="changeClass('REP1');">REPS</td>
    <td id="td1">&nbsp;</td>
  </tr>
  <tr>
    <td id="td1">&nbsp;</td>
    <td id="D1" onclick="changeClass('D1');">Doors</td>
  </tr>
  <tr>
    <td id="td1">&nbsp;</td>
    <td id="D12" onclick="changeClass('D12');">Doors</td>
  </tr>
</table>


9
आपको str.indexOf("REP") == 0इसके बजाय IE के लिए उपयोग करने की आवश्यकता होगी ।
ग्रांट थॉमस

1
ES6 अभी तक एक मानक नहीं है kangax.github.io/compat-table/es6 एक ES6 शिम संक्रमण मदद करने के लिए पुस्तकालय है github.com/paulmillr/es6-shim बस ES5 के लिए की तरह (नहीं सब कुछ शामिल है shimmable है)
Xotic750

जवाबों:


320

String.prototype.startsWith जावास्क्रिप्ट, ईएस 6 के सबसे हाल के संस्करण में एक मानक विधि है।

नीचे दी गई संगतता तालिका को देखते हुए, हम देख सकते हैं कि यह इंटरनेट एक्सप्लोरर के संस्करणों को छोड़कर सभी मौजूदा प्रमुख प्लेटफार्मों पर समर्थित है ।

╔═══════════════╦════════╦═════════╦═══════╦═══════════════════╦═══════╦════════╗
    Feature     Chrome  Firefox  Edge   Internet Explorer  Opera  Safari 
╠═══════════════╬════════╬═════════╬═══════╬═══════════════════╬═══════╬════════╣
 Basic Support     41+      17+  (Yes)  No Support            28       9 
╚═══════════════╩════════╩═════════╩═══════╩═══════════════════╩═══════╩════════╝

आपको .startsWithखुद को लागू करने की आवश्यकता होगी । यहाँ पॉलीफ़िल है :

if (!String.prototype.startsWith) {
  String.prototype.startsWith = function(searchString, position) {
    position = position || 0;
    return this.indexOf(searchString, position) === position;
  };
}

3
MDN वेब डॉक्स पर एक और कार्यान्वयन हैString.prototype.startsWith = function(search, pos) { return this.substr(!pos || pos < 0 ? 0 : +pos, search.length) === search; };
oCcSking

1
मैं @ ओका द्वारा दिए गए पहले कार्यान्वयन के लिए तैयार हूं। अतिरिक्त परिशोधन के रूप में "स्थिति" के लिए परीक्षण वास्तव में संख्यात्मक हो सकता है: स्थिति =? !NNN (parseInt (स्थिति))? स्थिति: 0;
अर्नेस्ट वी

36

text.indexOf("newString")के बजाय सबसे अच्छा तरीका है startsWith

उदाहरण:

var text = "Format";
if(text.indexOf("Format") == 0) {
    alert(text + " = Format");
} else {
    alert(text + " != Format");
}

यह सबसे अच्छी विधि क्यों है?
टायलरएच

1
IndexOf Method StartWith के प्रतिस्थापन में नहीं है, अगर यह किसी दिए गए स्ट्रिंग में मेल खाता है तो indexOf मान लौटाएगा, मैं indexOf का उपयोग करने का सुझाव नहीं देता।
राजकुमार समला

12
indexOfमान लौटाता है, लेकिन @ जोना ने जाँच की है कि वापसी मूल्य शून्य है (यानी स्ट्रिंग शुरुआत में है), जिसका अर्थ है कि यह एक अच्छा प्रतिस्थापन है startsWith!
शार्प मार्क

यह पॉलीफ़िल की तरह ही कार्यक्षमता है, जिसमें पॉलीफ़िल को जोड़ने या अतिरिक्त पुस्तकालय में लाने के बिना है। यह एक उत्कृष्ट समाधान है - एकमात्र नकारात्मक पहलू जो मैं देख सकता हूं वह शायद कोड पठनीयता है - जब फ़ंक्शन नाम दिया जाता है तो इरादा अधिक स्पष्ट होता है।
जॉन टी।

13

इस हैं कोणीय 2 + आवेदन में हो रहा है, आप कर सकते हैं बस टिप्पणी हटाएं में स्ट्रिंग polyfills polyfills.ts :

import 'core-js/es6/string';

मैंने ओका के पॉलीफ़िल फिक्स को जोड़ा, लेकिन यह मेरे लिए मेरे कोणीय 5 आवेदन पर काम नहीं किया, लेकिन इसे import 'core-js/es6/string';ठीक कर दिया। बहुत धन्यवाद!
धोखेबाज

5

प्रारंभ फ़ंक्शन को इसके साथ बदलें:

yourString.indexOf(searchString, position) // where position can be set to 0

यह IE सहित सभी ब्राउज़रों का समर्थन करेगा

स्थिति को स्ट्रिंग से मेल खाते के लिए 0 पर सेट किया जा सकता है जिसका अर्थ है 0 वें स्थान से।


प्रोटोटाइप को फिर से लिखना और न ही पॉलीफिल्स का उपयोग किए बिना उपयोगी समाधान। साथ ही यह ब्राउज़रों के बीच विस्तृत है। +1
सर्जियो ए।

2

जैसा कि दूसरों ने कहा है कि प्रारंभ और अंतिम के साथ ES6 का हिस्सा है और IE11 में उपलब्ध नहीं है। हमारी कंपनी हमेशा IE11 के लिए पॉलिफिल समाधान के रूप में लॉश लाइब्रेरी का उपयोग करती है। https://lodash.com/docs/4.17.4

_.startsWith([string=''], [target], [position=0])

0

हालांकि ओका का पद बहुत अच्छा काम कर रहा है, यह थोड़ा पुराना हो सकता है। मुझे पता लगा कि लॉश एक एकल समारोह से निपट सकता है। यदि आपने लॉस्ट इंस्टॉल किया है, तो यह आपको कुछ लाइनें बचा सकता है।

कोशिश करो:

import { startsWith } from lodash;

। । ।

    if (startsWith(yourVariable, 'REP')) {
         return yourVariable;        
    return yourVariable;
       }      
     }

0

मैंने हाल ही में प्रोब का भी सामना किया। मैंने ^ का उपयोग करके हल किया, जो स्टार्ट-अप के समान है jquery। कहो,

var str = array[a].id;
if (str.startsWith('REP')) {..........}

हम प्रयोग कर सकते हैं

if($("[id^=str]").length){..........}

यहाँ, str तत्व की आईडी है।


0

यदि कोणीय 2 + परियोजनाओं के साथ काम करते समय समस्या आती है तो इस विधि का पालन करें

मैं एक समाधान की तलाश में था जब मुझे यह त्रुटि मिली, और यह मुझे यहां मिला। लेकिन यह प्रश्न विशिष्ट प्रतीत होता है, लेकिन त्रुटि इसकी सामान्य त्रुटि नहीं है। यह इंटरनेट एक्सप्लोरर से निपटने वाले कोणीय डेवलपर्स के लिए एक सामान्य त्रुटि है।

कोणीय 2+ के साथ काम करते समय मेरे पास एक ही मुद्दा था, और यह केवल कुछ सरल चरणों से हल हो गया।

कोणीय नवीनतम संस्करण में, वहाँ में टिप्पणी की कोड आते हैं polyfills.ts सभी के लिए आवश्यक polyfills शो इंटरनेट एक्सप्लोरर संस्करण IE09, IE10 और IE11 में चल चिकनी

/** IE9, IE10 and IE11 requires all of the following polyfills. **/
//import 'core-js/es6/symbol';
//import 'core-js/es6/object';
//import 'core-js/es6/function';
//import 'core-js/es6/parse-int';
//import 'core-js/es6/parse-float';
//import 'core-js/es6/number';
//import 'core-js/es6/math';
//import 'core-js/es6/string';
//import 'core-js/es6/date';
//import 'core-js/es6/array';
//import 'core-js/es6/regexp';
//import 'core-js/es6/map';
//import 'core-js/es6/weak-map';
//import 'core-js/es6/set';

कोड को हटा दें और यह IE ब्राउज़रों में पूरी तरह से काम करेगा

/** IE9, IE10 and IE11 requires all of the following polyfills. **/
import 'core-js/es6/symbol';
import 'core-js/es6/object';
import 'core-js/es6/function';
import 'core-js/es6/parse-int';
import 'core-js/es6/parse-float';
import 'core-js/es6/number';
import 'core-js/es6/math';
import 'core-js/es6/string';
import 'core-js/es6/date';
import 'core-js/es6/array';
import 'core-js/es6/regexp';
import 'core-js/es6/map';
import 'core-js/es6/weak-map';
import 'core-js/es6/set';

लेकिन आप IE ब्राउज़रों में दूसरों की तुलना में एक प्रदर्शन गिरावट देख सकते हैं :(

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.