首页 > 解决方案 > 代码在 Internet Explorer 中不起作用的问题

问题描述

我正在使用一种适用于所有浏览器但不适用于 IE11 或 IE10 的代码

我该如何解决

$(`#${formID} textarea:not(.ctype)`).each(function(k) {

因为 ` 的使用似乎有问题,而且 IE 不喜欢它

标签: javascriptjquery

解决方案


如果您想在 IE 中模拟模板文字,您可以做的最接近的事情是格式化字符串并用条目映射替换占位符值。

// Custom formatter function
function frmt(str, obj) {
  return Object.entries(obj).reduce(function(acc, [key, val]) {
    return acc.replace(new RegExp('\\$\\{' + key + '\\}', 'g'), val);
  }, str);
}

// jQuery selector
const selector = frmt('#${formID} textarea:not(.ctype)', { formID: 'my-form' });

console.log(selector);

$(selector).each(function(textarea) {
  console.log($(this).text());
});
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<form id="my-form">
  <textarea>A</textarea>
  <textarea>B</textarea>
  <textarea class="ctype">C</textarea>
</form>


如果你想让代码可移植,你可以写一个 jQuery 插件:

// Custom selector plugin
(function($) {
  $.sel = function(selector, repl) {
    return $(Object.entries(repl).reduce(function(acc, [key, val]) {
      return acc.replace(new RegExp('\\$\\{' + key + '\\}', 'g'), val);
    }, selector));
  };
})(jQuery);


$.sel('#${formID} textarea:not(.ctype)', { formID: 'my-form' })
  .each(function(textarea) {
    console.log($(this).text());
  });
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<form id="my-form">
  <textarea>A</textarea>
  <textarea>B</textarea>
  <textarea class="ctype">C</textarea>
</form>


推荐阅读