Javascript.RU

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

querySelectorAll / is not a valid selector
Привет!

Делаю динамические табы.
Структура такая:
<ul>

    <li data-attr="a">....</li> 
    <li data-attr="b">....</li>
    <li data-attr="c">....</li>
     ...
    <li data-attr="z">....</li>

</ul>

<div>

    <div data-attr="a"></div>
    <div data-attr="b"></div>
    <div data-attr="c"></div>
     ...  
    <div data-attr="z"></div>
 
</div>


К каждому табу li привязан свой контект div. Табы создаются динамически, при создании им (li и div) задаётся data-attr, по которому потом при удалении они в связке и должны удаляться.

"Выборка" на удаление производится при помощи document.querySelectorAll(). Проблема в том, что в отличие от HTML5, в CSS3 не валидны названия селекторов, начинающихся с цифр.
При создании пользователь сам задаёт значение data-attr, которое и является названием самой вкладки таб.

Какими способами можно решить такую задачу?
Видятся следующие варианты:
1. Делать привязку к классу и выбирать потом по классу, а не по data-attr.
2. Присваивать автоматически значеніе для data-attr при создании табов, чтобы там по умолчанию не было в начале цифр. Например, "tab" + "название, введённое пользователем"
3. Блокировать ввод цифр для названия табов (только буквенные символы). Но такой вариант совсем не нравится.

Последний раз редактировалось Alexander Belov, 11.04.2016 в 22:57.
Ответить с цитированием
  #2 (permalink)  
Старый 11.04.2016, 23:04
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,126

Alexander Belov,
зачем data, разве индекса недостаточно?
Ответить с цитированием
  #3 (permalink)  
Старый 11.04.2016, 23:05
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,126

Сообщение от Alexander Belov
К каждому табу li привязан свой контект div.
зачем ещё-то нужно делать выборку?
Ответить с цитированием
  #4 (permalink)  
Старый 11.04.2016, 23:10
Аватар для Alexander Belov
Профессор
Отправить личное сообщение для Alexander Belov Посмотреть профиль Найти все сообщения от Alexander Belov
 
Регистрация: 12.03.2015
Сообщений: 173

рони,
1. Каким образом по индексу можно связать li и div? Учитывая, что табы могут добавляться и удаляться постоянно? Т.е. если например хранить всё в массиве, то индекс №..., например, не всегда будет соответствовать одному и тому же табу.

2. "Выборка" для удаления. Кликая на таб, мы находим div с таким же data-attr и удаляем их.
Ответить с цитированием
  #5 (permalink)  
Старый 11.04.2016, 23:22
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,126

Alexander Belov,

сделайте макет ...
Ответить с цитированием
  #6 (permalink)  
Старый 11.04.2016, 23:47
Аватар для Alexander Belov
Профессор
Отправить личное сообщение для Alexander Belov Посмотреть профиль Найти все сообщения от Alexander Belov
 
Регистрация: 12.03.2015
Сообщений: 173

JS Bin
Ответить с цитированием
  #7 (permalink)  
Старый 12.04.2016, 00:10
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,126

Alexander Belov, удаление по индексу
if (target == x[i]) {
                var li = document.querySelectorAll('.tab')[i],
                div =  document.querySelectorAll('.content')[i];
		 		li.parentNode.removeChild(li);
                div.parentNode.removeChild(div);
		 	}
Ответить с цитированием
  #8 (permalink)  
Старый 12.04.2016, 00:25
Аватар для Alexander Belov
Профессор
Отправить личное сообщение для Alexander Belov Посмотреть профиль Найти все сообщения от Alexander Belov
 
Регистрация: 12.03.2015
Сообщений: 173

рони,
Благодарю!
Всё намного проще, оказывается. Такой способ ещё не встречал.
Ответить с цитированием
  #9 (permalink)  
Старый 12.04.2016, 00:30
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,126

Alexander Belov,
проще будет при создании добавлять удаление -- тогда и цикла и индекса ненадо будет
Ответить с цитированием
  #10 (permalink)  
Старый 12.04.2016, 01:02
Аватар для Alexander Belov
Профессор
Отправить личное сообщение для Alexander Belov Посмотреть профиль Найти все сообщения от Alexander Belov
 
Регистрация: 12.03.2015
Сообщений: 173

рони,
Не понимаю, что Вы имеете в виду. При создании мы создаём элемент и прикрепляем его к родителю, нажав на кнопку Ок. Как туда удаление увязать?

+

Разве не должны функции разбиваться максимально по логике? Одна на добавление, вторая на удаление и т.д., каждая для своего предназначения.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
jQuery научите пользоваться. Станислав89 Общие вопросы Javascript 10 19.12.2013 23:01
querySelectorAll - Как научить ему ie 8- ??? viktorina Internet Explorer 6 06.01.2013 15:46
The only valid measurement of code quality: WTFs/m x-yuri Оффтопик 0 30.01.2011 13:26
Selector - чтобы выбрать следующий tag Beck jQuery 5 29.01.2010 16:29
XHTML 1.0 Valid Илья Кантор Сайт Javascript.ru 24 03.04.2008 19:49