2015-07-04 20 views
31

Tôi đã làm việc trên một dự án và phát triển một khung JavaScript. Mã ban đầu là khoảng 700 dòng vì vậy tôi chỉ dán dòng này. Phương pháp bao gồm không hoạt động trên Internet Explorer. Có giải pháp nào cho điều này?tức là không hỗ trợ phương pháp 'bao gồm'

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

... Mã đi trên

+0

Có phương pháp tương đương nào không? Không phải mọi người kiểm tra nếu một str được bao gồm trong str khác trong internet explorer? :) –

+0

Tôi chỉ giải quyết bằng cách sử dụng phương pháp indexOf .. –

Trả lời

48

Bởi vì nó không được hỗ trợ trong IE, nó không được hỗ trợ cũng trong Opera (see the compatibility table), nhưng bạn có thể sử dụng các gợi ý polyfill:

Polyfill

Phương pháp này đã được thêm vào đặc tả ECMAScript 2015 và có thể không có sẵn trong tất cả các triển khai JavaScript t. Tuy nhiên, bạn có thể dễ dàng polyfill phương pháp này:

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

Cảm ơn @InferOn. Đây là thứ tuyệt vời. Tôi đang chọn JavaScript ngay bây giờ, nhưng muốn hỏi chính xác biến 'arguments' được truyền vào' apply() 'là gì? Tôi 'console.log()' nó trong IE và thấy rằng nó là một số loại đối tượng 'Argument', nhưng tôi không hiểu nó đến từ đâu chính xác vì nó dường như không được định nghĩa ở bất cứ đâu. –

+0

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Functions/arguments có thể giúp bạn – InferOn

16

@ Suy luận-on cho thấy câu trả lời tuyệt vời, nhưng nó có một vấn đề trong một tình huống cụ thể. Nếu bạn sử dụng vòng lặp for-in, nó sẽ trả về bao gồm hàm "include" mà bạn đã thêm vào.

Đây là một pollyfill khác.

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; 
     } 
    }); 
} 
Các vấn đề liên quan