Я работаю над функцией, которая просматривает список табличных значений на странице, и если заголовок столбца содержит какую-либо часть output
, он будет соответствующим образом преобразовывать значение.
function createLink(field, val) {
var output = {
'ntid': 'https://internal/profile/' + val,
'email': 'mailTo:' + val
};
var i, key, keys = Object.keys(output);
for ( i = 0; i < keys.length; ++i ) {
key = keys[i];
if ((field.toLowerCase()).includes(key)) {
return '<a href="'+output[key]+'" target="_blank">'+val+'</a>';
}
}
return val;
}
Проблема, с которой я сталкиваюсь, заключается в том, что IE выдает ошибку в строке .includes()
которой говорится, что "Объект не поддерживает свойство или метод" включает в себя "".
У меня было немного проблем с тем, чтобы заставить его работать так, как есть, но не понимал, что includes()
должно быть то, что не все браузеры поддерживают.
Есть ли что-то еще, что я могу использовать вместо этого, что позволит использовать кросс-браузер?
includes()
является частью спецификации ES6
, поэтому она не поддерживается в IE. Вместо этого вы можете использовать indexOf(element) !== -1
заменить:
if(field.toLowerCase().includes(key)) {
чтобы:
if(field.toLowerCase().indexOf(key) > -1) {
Для вашей справки Mozilla Developer Network показывает, какие браузеры поддерживают String.prototype.includes
.
У IE нет поддержки. При этом вы всегда можете его полифонировать или делать так, как указывали другие, и использовать String.prototype.indexOf
.
Polyfill src: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/includes#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;
}
};
}
Для реакции:
import 'react-app-polyfill/ie11';
import 'core-js/es5';
import 'core-js/es6';
import 'core-js/es7';
Решение проблемы для - includes(), find() и т.д.