2015-07-04 30 views
31

Bir proje üzerinde çalışıyorum ve bir JavaScript çerçevesi geliştiriyorum. Orijinal kod yaklaşık 700 satırdır, bu yüzden sadece bu satırı yapıştırdım. Içerir yöntemi, Internet Explorer'da çalışmaz. Bunun için herhangi bir çözüm var mı? IE'de desteklenmez Çünküyani 'içerir' yöntemini desteklemiyor

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)); 

... Kod bunun Opera (see the compatibility table) da desteklenmez,

+0

herhangi eşdeğer bir yöntem var mı? İnternet explorer'da str'nin diğer str'de bulunup bulunmadığını insanlar kontrol etmiyor mu? :) –

+0

Sadece bunu indexOf yöntemini kullanarak çözdüm .. –

cevap

48

gider, ancak polyfill önerilen kullanabilirsiniz:

polyfill Bu yöntem ECMAScript 2015 şartnamesine ilave edilmiş ve tüm JavaScript uygulamaları ye bulunmayabilir t. Ancak, kolayca bu yöntemi polyfill edebilirsiniz:

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

Teşekkürler @InferOn. Bu harika bir şey. Şu anda JavaScript'i alıyorum, ancak 'arguments' değişkeninin tam olarak ne olduğunu sormak istedim,' apply() 'nedir? IE'de console.log() 'ı ve bunun bir çeşit“ Argüman ”nesnesinin olduğunu görüyorum, fakat tam olarak nereden geldiğini anlamıyorum, çünkü hiçbir yerde tanımlanmış görünmüyor. –

+0

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/arguments size yardımcı olabilir – InferOn

8

Sadece .search kullanabilirsiniz()> -1 tam aynı şekilde davranacağı. Infer-büyük cevabı gösterilen, ancak belirli bir durumda bir sorun var @http://www.w3schools.com/jsref/jsref_search.asp

if ((row_cells[i]+"").search("#Eval(" + k + ")") > -1) { 
16

. For-in döngü kullanırsanız, eklediğiniz "içerir" işlevini döndürecektir.

İşte başka bir 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; 
     } 
    }); 
} 
İlgili konular