22

proprio qui è un blocco del mio codice. Funziona perfettamente in fireFox e Chrome. Ma non in IE. Ottengo l'errore "Object doesn't support property or method 'includes'"include() non funziona su tutti i browser

function rightTreeSwapfunc2() { 
    if ($(".right-tree").css("background-image").includes("stage1") == true) { 
     $(".right-tree").css({ 
      backgroundImage: "url(/plant-breeding/img/scenes/plant-breeding/stage5.jpg)" 
     }) 
    } else { 
     $(".right-tree").css({ 
      backgroundImage: "url(/plant-breeding/img/scenes/plant-breeding/stage3.jpg)" 
     }) 
    } 
} 

ho potuto cambiare un po 'e utilizzare la vaniglia JS e fare:

document.getElementById("right-tree").classList.contains

Ma preferirei vedere se c'è un modo per farlo lavorare in IE prima di cambiare il JS e modificare HTML e CSS.

+0

trovo strano che la Grea t leveler, jQueery, non riesce a riportare tutti i browser al minimo comune denominatore - se 'includes' non funziona in IE, non dovrebbe funzionare in alcun browser –

+0

[includes()] (https: //developer.mozilla .org/it/US/docs/Web/JavaScript/Riferimento/Global_Objects/Array/includes) funzione non stabile nei cross browser – Girish

+0

include non ha nulla a che fare con jQueery - la domanda è difettosa: p –

risposta

50

Se si guarda la documentazione di includes(), la maggior parte dei browser non supporta questa proprietà.

È possibile utilizzare ampiamente supportato indexOf() dopo la conversione la proprietà di stringa utilizzando toString():

if ($(".right-tree").css("background-image").indexOf("stage1") > -1) { 
//           ^^^^^^^^^^^^^^^^^^^^^^ 

È anche possibile utilizzare la polyfill da MDN.

if (!String.prototype.includes) { 
    String.prototype.includes = function() { 
     'use strict'; 
     return String.prototype.indexOf.apply(this, arguments) !== -1; 
    }; 
} 
+0

Ho dovuto sostituire le mie istanze di '.includes()' per la compatibilità con IE. Ho cambiato 'haystack.includes (needle)' a 'haystack.indexOf (needle)! == -1' e funziona su IE11. – KillahB

1

IE11 implementa String.prototype.include quindi perché non utilizzare Polyfill ufficiale?

Fonte:. ". Destro-tree "polyfill source

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

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

Un'altra soluzione è quella di utilizzare contiene che restituirà vero o falso

_.contains ($() CSS (" background-image "), "stage1")

Spero che questo aiuti

+0

Se non sbaglio, questa è una funzione fornita dalla libreria underscorejs. A meno che non stia già utilizzando questo, sarebbe uno spreco includere un'intera libreria solo per questo polyfill. –