Ошибка типа: c.совпадение не является функцией

#javascript #jquery

#javascript #jquery

Вопрос:

Я получаю ошибку типа: c.совпадение не является функцией в консоли поиска браузера, когда я пытаюсь выполнить этот код. где я допускаю ошибку?

 (function() {
    function addIcon(el, entity) {
        var html = el.innerHTML;
        el.innerHTML = '<span style="font-family: 'B3-Line-Icons'">'   entity   '</span>'   html;
    }
    var icons = {
        'b3icon-scale': 'amp;#xe900;',
        'b3icon-file-text': 'amp;#xe901;',
        'b3icon-skyscraper': 'amp;#xe902;',
        'b3icon-girl': 'amp;#xea67;',
        '0': 0
        },
        els = document.getElementsByTagName('*'),
        i, c, el;
    for (i = 0; ; i  = 1) {
        el = els[i];
        if(!el) {
            break;
        }
        c = el.className;
        c = c.match(/b3icon-[^s'"] /);
        if (c amp;amp; icons[c[0]]) {
            addIcon(el, icons[c[0]]);
        }
    }
}());
  

Комментарии:

1. Можете добавить свой фрагмент кода и поделиться им здесь?

Ответ №1:

Я бы посоветовал вам упростить ваш запрос к dom. До сих пор вам, похоже, нужны все элементы, но почему бы просто не запросить те, где className начинается с b3icon ?

Так что измените

 document.getElementsByTagName(*)
  

Для

 document.querySelectorAll('[class^="b3icon]')
  

После чего логика цикла for становится намного проще

 const elements = document.querySelectorAll('[class^="b3icon"]');
for (let element of elements) {
  const [match] = element.className.match(/b3icon-[^s'"] /);
  if (match amp;amp; icons[match]) {
    addIcon(element, icons[match]);
  }
}
  

И вы можете увидеть пример в этом фрагменте кода

 (function() {
  function addIcon(el, entity) {
    var html = el.innerHTML;
    el.innerHTML = '<span style="font-family: 'B3-Line-Icons'">'   entity   '</span>'   html;
  }
  const icons = {
    'b3icon-scale': 'amp;#xe900;',
    'b3icon-file-text': 'amp;#xe901;',
    'b3icon-skyscraper': 'amp;#xe902;',
    'b3icon-girl': 'amp;#xea67;',
    '0': 0
  };
  const elements = document.querySelectorAll('[class^="b3icon"]');
  for (let element of elements) {
    const [match] = element.className.match(/b3icon-[^s'"] /);
    if (match amp;amp; icons[match]) {
      addIcon(element, icons[match]);
    }
  }
}());  
 <span>Not so important</span>
<span class="b3icon-girl"></span>  

Ответ №2:

el.className, вероятно, не определено (или не является строкой).

Ответ №3:

Проверьте значение el.className

Проверьте, является ли значение в c строковым.