Задать вопрос

Function addClass() Функция будто игнорирует значения true or false

function hasClass(obj, name) {
  obj = ge(obj);
  return obj && (new RegExp('(\\s|^)' + name + '(\\s|$)')).test(obj.className);
}
function addClass(obj, name) {
	var obj = ge(obj);
  if (!hasClass(obj, name)) {
    obj.className = (obj.className ? obj.className + ' ' : '') + name;
  }
}


Проблема в том, что addClass() будто игнорирует логическое значение функции hasClass и добавляет классы подряд. В чем может быть проблема?
6b769a3a1375c62982ea11565231190c.png5bee8568b2f3a17b0775553cc707e0f8.png48f7088e925a6de9ca9da00048c53cb6.png
  • Вопрос задан
  • 2788 просмотров
Подписаться 5 Оценить 1 комментарий
Пригласить эксперта
Ответы на вопрос 4
Может быть переписать вот так:
function hasClass(selector, name) {
  var obj = ge(selector);

  return obj && (new RegExp('(\\s|^)' + name + '(\\s|$)')).test(obj.className);
}

function addClass(selector, name) {
  var obj = ge(selector);

  if ( !hasClass(selector, name) ) {
    obj.className = (obj.className ? obj.className + ' ' : '') + name;
  }
}
Ответ написан
Комментировать
@personaljs
как бы у тебя работает// Первый раз показал что нет класа, далее ты добавил класс, он показал что есть.

Почему не работает у вас: вы получили в опциях obj и переопределяете его, а после чего проверяете наличие класса у изменившегося значения obj
Ответ написан
Комментировать
Pozadi
@Pozadi
Вопрос в том что делает ge(), вы пишите obj = ge(obj), после чего передаете новый obj в hasClass(). А в hasClass() этот obj опять проходит через ge(). Думаю проблема в этом.

Еще вы забыли var перед obj во второй строке, и name перед добавлением в регексп нужно заэскейпить.

Функция для эскейпа (stackoverflow.com/questions/3446170/escape-string-...):
function escapeRegExp(str) {
  return str.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\$&");
}
Ответ написан
Комментировать
Anonym
@Anonym
Программирую немного )
Может лучше использовать classList и polyfill к нему?
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы
22 дек. 2024, в 20:40
10000 руб./за проект
22 дек. 2024, в 20:34
3000 руб./за проект
22 дек. 2024, в 20:12
10000 руб./за проект