Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 18.06.2017, 22:26
Аспирант
Отправить личное сообщение для Alessio18911 Посмотреть профиль Найти все сообщения от Alessio18911
 
Регистрация: 18.06.2017
Сообщений: 87

как сократить названия классов с общим началом в массиве
Привет! К JS только-только подступился, но кое-что уже знаю. Проблема такая. Есть кусочек кода:
<div class="page bg1">
      <div class="radio-controls">
        <label class="label" for="radio1"></label>
        <label class="label" for="radio2"></label>
        <label class="label" for="radio3"></label>
      </div>
</div>


и к нему CSS:
.page {
  position: relative;
  width: 400px;
  height: 250px;
  outline: 1px solid orange;
}

.bg1 {
  background-image: url("Gora-400x250.jpg");
}

.bg2 {
  background-image: url("IMG_0863m.jpg");
}

.bg3 {
  background-image: url("Torosskie-goryi-400x250.jpg");
}

.radio-controls {
  position: absolute;
  bottom: 0;
  left: 50%;
  margin-left: -55px;
  width: 110px;
  height: 50px;
  text-align: center;
  line-height: 65px;
  outline: 1px solid red;
}

label {
  display: inline-block;
  width: 20px;
  height: 20px;
  background-color: dodgerblue;
  background-clip: padding-box;
  border: 5px solid transparent;
  border-radius: 50%;
  box-shadow: 0 0 2px 1px dodgerblue;
}


Нужно сделать так, чтобы при клике по любому label у div.page удалялся бы любой класс, имя которого начинается с bg-, если вдруг он обнаружился. Всё, что удалось мне придумать, это длинные условия, вроде:
if(page[0].classList.contains("bg1") || page[0].classList.contains("bg2"))
и т.д... А можно ли как-то укоротить текст условия? Ну, например, как в CSS есть селекторы по атрибуту [class^='bg-'], есть ли что-то подобное в синтаксисе JS?

Последний раз редактировалось Alessio18911, 18.06.2017 в 22:50.
Ответить с цитированием
  #2 (permalink)  
Старый 18.06.2017, 22:44
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,072

Alessio18911,
если в у div.page всего 2 класса "[class*='bg']"
Ответить с цитированием
  #3 (permalink)  
Старый 18.06.2017, 22:45
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,072

Пожалуйста, отформатируйте свой код!

Для этого его можно заключить в специальные теги: js/css/html и т.п., например:
[js]
... ваш код...
[/js]


О том, как вставить в сообщение исполняемый javascript и html-код, а также о дополнительных возможностях форматирования - читайте http://javascript.ru/formatting.
Ответить с цитированием
  #4 (permalink)  
Старый 18.06.2017, 22:48
Аватар для ruslan_mart
Профессор
Отправить личное сообщение для ruslan_mart Посмотреть профиль Найти все сообщения от ruslan_mart
 
Регистрация: 30.04.2012
Сообщений: 3,018

var page = document.querySelector('.page');

page.onclick = function(e) {
    if(e.target.tagName === 'label') {
        for(var i = 0; i < this.classList.length; i++) {
            if(this.classList[i].indexOf('bg') === 0) {
                this.classList.remove(this.classList[i]);
                break;
            }
        }
    }
};


или

var page = document.querySelector('.page');

page.onclick = function(e) {
    if(e.target.tagName === 'label') {
        this.className = this.className.replace(/bg\d+/, '');
    }
};
Ответить с цитированием
  #5 (permalink)  
Старый 18.06.2017, 22:52
Аспирант
Отправить личное сообщение для Alessio18911 Посмотреть профиль Найти все сообщения от Alessio18911
 
Регистрация: 18.06.2017
Сообщений: 87

Сообщение от рони Посмотреть сообщение
Alessio18911,
если в у div.page всего 2 класса "[class*='bg']"
У меня их три: bg1, bg2, bg3. Т.е. не получится? Наверное, надо пояснить, для чего я это делаю. Смысл в следующем: я хочу сделать слайдер. И div.page, в зависимости от того, какой label кликнут, должны присваиваться соответственно bg1, bg2, bg3. Но для того, чтобы переключение работало и в обратном порядке, нужно, чтобы прежде чем присвоить нужный класс, очистить div.page от другого bg.

Последний раз редактировалось Alessio18911, 18.06.2017 в 22:54.
Ответить с цитированием
  #6 (permalink)  
Старый 18.06.2017, 22:53
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,072

Сообщение от Alessio18911
Т.е. не получится?
получится уточните только где менять -- все или в том где клик?
Ответить с цитированием
  #7 (permalink)  
Старый 18.06.2017, 22:56
Аспирант
Отправить личное сообщение для Alessio18911 Посмотреть профиль Найти все сообщения от Alessio18911
 
Регистрация: 18.06.2017
Сообщений: 87

Сообщение от Ruslan_xDD Посмотреть сообщение
var page = document.querySelector('.page');

page.onclick = function(e) {
    if(e.target.tagName === 'label') {
        for(var i = 0; i < this.classList.length; i++) {
            if(this.classList[i].indexOf('bg') === 0) {
                this.classList.remove(this.classList[i]);
                break;
            }
        }
    }
};


или

var page = document.querySelector('.page');

page.onclick = function(e) {
    if(e.target.tagName === 'label') {
        this.className = this.className.replace(/bg\d+/, '');
    }
};
Спасибо! Второй вариант понятнее. Только Вы могли бы пояснить мне (/bg\d+/, '')?
Ответить с цитированием
  #8 (permalink)  
Старый 18.06.2017, 22:57
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,072

зачем проверка нужна ??? className = "page"
Ответить с цитированием
  #9 (permalink)  
Старый 18.06.2017, 22:57
Аспирант
Отправить личное сообщение для Alessio18911 Посмотреть профиль Найти все сообщения от Alessio18911
 
Регистрация: 18.06.2017
Сообщений: 87

Сообщение от рони Посмотреть сообщение
получится уточните только где менять -- все или в том где клик?
Наверное, надо пояснить, для чего я это делаю. Смысл в следующем: я хочу сделать слайдер. И div.page, в зависимости от того, какой label кликнут, должны присваиваться соответственно bg1, bg2, bg3. Но для того, чтобы переключение работало и в обратном порядке, нужно, чтобы прежде чем присвоить нужный класс, очистить div.page от другого bg.
Ответить с цитированием
  #10 (permalink)  
Старый 18.06.2017, 23:04
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,072

Сообщение от Alessio18911
очистить div.page от другого bg.
можно не очищать className = "page bg1"
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
как передать данные из json в названия параметров shultz1988 Общие вопросы Javascript 2 20.07.2011 11:15
Уникальность элементов в массиве - как? .andreev Общие вопросы Javascript 2 14.11.2010 15:03
Получение данных из тега в массиве, как? Madd Общие вопросы Javascript 37 06.07.2010 00:59
Как определить количество элементов в многомерном массиве Dima00782 Общие вопросы Javascript 3 12.06.2010 14:15
Как найти индекс по элементу в двумерном массиве? bayah Общие вопросы Javascript 5 22.04.2010 16:26