Chefranov
@Chefranov
Новичок

Как сократить код?

Подскажите, как сократить следующий код под jquery. Код выполняет функцию BB-кода для форума.

e = document.getElementsByTagName("td");
     for (k = 0; k < e.length; k++) {
         if (e[k].className == 'posttdMessage') {
             s = e[k].innerHTML;
             while (s.indexOf('[admin]') != -1) {
                 s = s.replace('[admin]', '<div class="admin-text">');
                 s = s.replace('[/admin]', '</div>');
                 e[k].innerHTML = s;
             }
         }
     }


e = document.getElementsByTagName("td");
     for (k = 0; k < e.length; k++) {
         if (e[k].className == 'posttdMessage') {
             s = e[k].innerHTML;
             while (s.indexOf('[info]') != -1) {
                 s = s.replace('[info]', '<div class="info-text">');
                 s = s.replace('[/info]', '</div>');
                 e[k].innerHTML = s;
             }
         }
     }


И таких BB-кодов у меня несколько. Может можно это всё как-то сократить? Может сделать функцию которая бы принимала название bb-кода и класс для дива?
  • Вопрос задан
  • 129 просмотров
Решения вопроса 1
sergiks
@sergiks Куратор тега JavaScript
♬♬
Замену лучше делать регулярными выражениями, чтобы сразу все вхождения заменить, а не по одному.
Какой bb-code на какой класс менять проще задать объектом-словарём.
Что-то вроде такого:
// словарь   bbcode: className
const dict = {
	'info': 'info-text',
	'admin': 'admin-text',
};

var tds = document.getElementsByTagName("td");
for (let k = 0; k < tds.length; k++) {
	let td = tds[k];
  if (td.className !== 'posttdMessage') continue;

  let s = td.innerHTML;
  for(let bb in dict) {
	  let re_open = new RegExp('\\[' + bb + '\\]', 'ig');
	  let re_close = new RegExp('\\[/' + bb + '\\]', 'ig');
	  s = s.replace(re_open, '<div class="' + dict[bb] + '">').replace(re_close, '</div>');
  }
  td.innerHTML = s;
}
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы