2015-07-04 9 views
31

Ich habe an einem Projekt gearbeitet und ein JavaScript-Framework entwickelt. Der ursprüngliche Code ist ungefähr 700 Zeilen, also habe ich nur diese Zeile eingefügt. Die Includes-Methode funktioniert nicht in Internet Explorer. Gibt es dafür eine Lösung?dh keine "Includes" -Methode unterstützt

var row_cells = tbl_row.match(/<td[\s\S]*?<\/td>/g); 

    row.Cells = new Array(); 
    if (onRowBindFuncText != null) { /*Fonksyon tanımlanmaışsa daha hızlı çalış*/ 

     var cellCount = 0; 
     for (i = 0; i < row_cells.length; i++) { 

      var cell = new Cell(); 
      $.each(this, function (k, v) { 

       if ((row_cells[i]+"").includes("#Eval(" + k + ")")) { 

        cell.Keys.push(new Key(k,v)); 

... Code geht auf

+0

Gibt es eine gleichwertige Methode? Überprüfen Leute nicht, ob ein Str in anderen Str im Internet Explorer enthalten ist? :) –

+0

Ich löste das nur mit der Methode indexOf. –

Antwort

48

Weil es nicht in IE unterstützt wird, ist es nicht auch in Opera unterstützt (see the compatibility table), aber Sie die vorgeschlagene polyfill verwenden:

Polyfill

Diese Methode wurde der ECMAScript 2015-Spezifikation hinzugefügt und ist möglicherweise nicht in allen JavaScript-Implementierungen verfügbar t. Sie können jedoch leicht diese Methode POLYfill:

if (!String.prototype.includes) { 
    String.prototype.includes = function(search, start) { 
    'use strict'; 
    if (typeof start !== 'number') { 
     start = 0; 
    } 

    if (start + search.length > this.length) { 
     return false; 
    } else { 
     return this.indexOf(search, start) !== -1; 
    } 
    }; 
} 
+0

Danke @InferOn. Das ist tolles Zeug. Ich nehme gerade JavaScript an, wollte aber fragen, was genau die 'arguments' -Variable ist, die an' apply() 'übergeben wird? Ich 'console.log()' es in IE und sehe, dass es eine Art von 'Argument' Objekt ist, aber ich verstehe nicht, woher es genau kommt, da es nirgendwo definiert scheint. –

+0

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/arguments könnte Ihnen helfen – InferOn

16

@ Infer-on große Antwort gezeigt, aber es ein Problem in einer bestimmten Situation hat. Wenn Sie eine For-In-Schleife verwenden, wird die von Ihnen hinzugefügte "includes" -Funktion zurückgegeben.

Hier ist ein weiterer Pollyfill.

if (!Array.prototype.includes) { 
    Object.defineProperty(Array.prototype, "includes", { 
    enumerable: false, 
    value: function(obj) { 
     var newArr = this.filter(function(el) { 
      return el == obj; 
     }); 
     return newArr.length > 0; 
     } 
    }); 
} 
Verwandte Themen