Как выбрать необходимый элемент из элементов блока по атрибуту data-*
с каким-то значением и присвоить модификатор активности?
т.е.
есть подобная структура
{
block: 'menu',
content: [
{
elem: 'item',
attrs: {'data-id': 4}
},
{
elem: 'item',
attrs: {'data-id': 2}
},
{
elem: 'item',
attrs: {'data-id': 9}
},
{
elem: 'item',
attrs: {'data-id': 1}
}
]
}
как выбрать элемент с data-id = 2 ?
Так же как и обычно. Вы можете использовать jQuery метод .data(). Или .filter('[data-id="2"]')
Мне кажется, лучше такие id передавать не в data-id атрибут, а в js:
А потом выбрать все элементы через
elem
и отфильтровать по id.т.е. можно использовать обычный синтаксис jQuery?
И немного разъяснения для себя...
i-bem включает уже в себя jQuery ? Или он при сборке подключается? Или это урезаная версия?
i-bem его использует для работы, по умолчанию загружает с yastatic.net: https://github.com/bem/bem-core/blob/v2/common.blocks/jquery/jquery.js https://github.com/bem/bem-core/blob/v2/common.blocks/jquery/__config/jquery__config.js
Есть блок jquery Если его указать в зависимостях - в аргументы попадет jQuery 2.1.3 Как уже отметил @zxqfox jQuery при этом подтянется с yastatic, это поведение можно изменить. С прилетевшим jQuery можно делать все, что хотите.
@zxqfox спасибо :) Нужно будет локальную загрузку jQuery сделать. Не всегда интернет под рукой есть
@belozyorcev Простейший вариант — прописать другой url в jquery__config на своем уровне переопределения.
Сложный вопрос ;-) Нужно как-то подменить оригинальный
jquery
блок, это можно сделать описав его на своем уровне, но как отменить базовый загрузчик — не знаю, надо копать.Все гораздо проще. Достаточно положить на уровне проекта папку
jquery
с файломjquery.js
, содержащим код jQuery.@tadatuta пришел и спас всех, как всегда!
@tadatuta красота )))
@apsavin
а как быть, когда один элемент относится к разным группам?
на примере можешь показать, как будет выглядеть такая запись (фильтрации с
id == 1
)?js: { id: 123 }
это вообще специальный случай, лучше другое имя использовать. groupIds?А фильтрация примерно так:
http://api.jquery.com/filter/#filter-function
upd поправил фильтрацию.
@zxqfox
ну id - чисто для примера )
спасибо, буду пробовать
Правильней будет использовать метод из i-bem.js для получения js параметров элемента
elemParams
https://github.com/bem/bem-core/blob/v2/common.blocks/i-bem/__dom/i-bem__dom.js#L835 Пример кода@tavriaforever
я правильно понимаю, что
вернёт все элементы у которых в параметрах JS есть массив с groups, в котором присутствует элемент "2"
Господа, может я поздноватенько :) Но кажется без всяческий магических фильтраций можно обойтись, используя модификатор id (или что угодно еще)
Выходит что чтобы получить элемент с каким-нибудь id = 4, достаточно сказать
А по поводу групп...кажется было бы неплохо объединять их в другие элементы (?) Т.е. вложенность: группа > айтемы с id, и получить айтем можно было бы так:
В чем профит моего решения?
И да, не стоит подобного боятся, ведь если надо что-то делать с домом, то лучше это что-то делать реже :) А если вам нужны данные (что в JS или в data-attrs), то можно либо дублировать, либо просто брать значение модификатора (тот же id или groupId).
@belyanskii В этом что-то есть ;-) Если эти дом-ноды для групп не мешают, то я бы так и сделал
@belyanskii А если элементы входят в разные группы? Т.е.
@belozyorcev если развивать идею @belyanskii, то поможет $.add()
@belozyorcev хм...я сторонник того, что все всегда можно сделать куда проще :) Попробуй обрисовать задачу целиком, а я если не забуду сделаю прототип >_<
Подскажите... А можно ли в элементах искать другие элементы ?
Т.е.
как во втором элементе (blockelem1) получить вложенные в него (blockelem2) или для этого использовать js параметры нужно?
@belozyorcev если порядок известен и гарантируется, то можно так:
Если порядок не гарантируется, то кроме js-параметров еще можно использовать модификаторы (в шаблонах есть доступно поле
this.position
с помощью которого легко их сгенерировать) или миксы, если у элементов есть какая-то особая семантика.@tadatuta я пересмотрел структуру проекта и подумал, что от
__elem1
лучше избавится, т.к. это упростит код и добавит большей гипкости. Все группировки производить у__elem2
через параметры js