Следующий код можно запустить без проблем в Chrome, но выдает следующую ошибку в Internet Explorer 11.
Объект не поддерживает свойство или метод "opensWith"
Я храню идентификатор элемента в переменной. В чем проблема?
function changeClass(elId) {
var array = document.getElementsByTagName('td');
for (var a = 0; a < array.length; a++) {
var str = array[a].id;
if (str.startsWith('REP')) {
if (str == elId) {
array[a].style.backgroundColor = "Blue";
array[a].style.color = "white";
} else {
array[a].style.backgroundColor = "";
array[a].style.color = "";
}
} else if (str.startsWith('D')) {
if (str == elId) {
array[a].style.backgroundColor = "Blue";
array[a].style.color = "white";
} else {
array[a].style.backgroundColor = "";
array[a].style.color = "";
}
}
}
}
<table>
<tr>
<td id="REP1" onclick="changeClass('REP1');">REPS</td>
<td id="td1"> </td>
</tr>
<tr>
<td id="td1"> </td>
<td id="D1" onclick="changeClass('D1');">Doors</td>
</tr>
<tr>
<td id="td1"> </td>
<td id="D12" onclick="changeClass('D12');">Doors</td>
</tr>
</table>
javascript
html
Бхушан Дхамдхере
источник
источник
str.indexOf("REP") == 0
вместо IE.Ответы:
String.prototype.startsWith
это стандартный метод в последней версии JavaScript, ES6.Глядя на приведенную ниже таблицу совместимости, мы видим, что она поддерживается на всех современных основных платформах, кроме версий Internet Explorer.
Вам нужно реализовать
.startsWith
себя. Вот такое заполнение :источник
String.prototype.startsWith = function(search, pos) { return this.substr(!pos || pos < 0 ? 0 : +pos, search.length) === search; };
text.indexOf("newString")
это лучший метод вместоstartsWith
.Пример:
источник
indexOf
возвращает значение, но @Jona проверил, что возвращаемое значение равно нулю (т.е. строка находится в начале), то есть это замена хорошоstartsWith
!Если это происходит в приложении Angular 2+, вы можете просто раскомментировать строку polyfills в polyfills.ts :
источник
import 'core-js/es6/string';
исправило его. Большое спасибо!Замените функцию startWith на:
Это будет поддерживать все браузеры, включая IE
Положение может быть установлено в 0 для сопоставления строк с начала, означающего 0-ю позицию.
источник
Как уже говорили другие, начало и конец и часть являются частью ES6 и недоступны в IE11. Наша компания всегда использует библиотеку lodash в качестве решения для заполнения в IE11. https://lodash.com/docs/4.17.4
источник
Хотя почта Оки работает отлично, она может быть немного устаревшей. Я понял, что lodash может справиться с этим с помощью одной функции. Если у вас установлен lodash, он может сэкономить вам несколько строк.
Просто попробуй:
, , ,
источник
Я тоже недавно сталкивался с пробой. Я решил использовать ^, который похож на startwith в
jquery
. Сказать,мы можем использовать
Здесь str - идентификатор элемента.
источник
Следуйте этому методу, если проблема возникает при работе с angular2 + проектами
Я искал решение, когда я получил эту ошибку, и это привело меня сюда. Но этот вопрос кажется конкретным, а ошибка нет, это общая ошибка. Это распространенная ошибка для разработчиков углов, имеющих дело с Internet Explorer.
В последних версиях Angular присутствуют закомментированные коды в polyfills.ts, в котором показаны все полизаполнения, необходимые для бесперебойной работы в версиях Internet Explorer IE09, IE10 и IE11.
Раскомментируйте коды, и они будут отлично работать в браузерах IE
Но вы можете увидеть снижение производительности в браузерах IE по сравнению с другими :(
источник