Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 13.06.2015, 13:56
Новичок на форуме
Отправить личное сообщение для Neibo Посмотреть профиль Найти все сообщения от Neibo
 
Регистрация: 13.06.2015
Сообщений: 3

Замена класса у множества одинаковых блоков
Приветствую! Сначала опишу задачу: делаю смену вывода товаров в интернет магазине с Grid на List, с плиток на список.

Как я делал это изначально:

В документе создал два цикла вывода товаров и плиткой и списком (php). Блоку со списком в css указал display: none;, так как вывод плиткой - дефолтный. Далее c помощью jquery организовал такую элементарную конструкцию:

$(document).ready(function() {


/*По нажатию на кнопку показа Grid разметки - прячу List разметку и показываю Grid*/	
$("#ShowGridBtn").click(function(){ 
	$(".List_Product_Block").hide(); 
	$(".Grid_Product_Block").show();
});
/*По нажатию на кнопку показа List разметки - прячу Grid разметку и показываю List*/	
$("#ShowListBtn").click(function(){
	$(".List_Product_Block").show();
	$(".Grid_Product_Block").hide();
});
});


Казалось бы, почему нет? Но, как обычно, за углом притаилось вонючее волосатое "Но". И вот в чем оно заключается:

"Плитка" товара состоит из картинки, названия и цены.
Блок товара в "Списке" состоит из картинки, названия, цены, описания и кнопки купить.

Поэтому имея на странице оба цикла с выводом и плиткой и листом я получаю на одной странице кучу дублирующегося контента и ссылок на каждый товар (по две одинаковые картинки, названия и цены). А это плохо с точки зрения SEO.

Если бы не мой чертов перфекционизм, клянусь, оставил бы как есть. Но, как вы уже поняли, я принял решения оставить один единственный блок с товаром и по нажатию на кнопку смены вида - менять классы у этого блока. .

Как я пытался это сделать:

<div id="Product_Block" class="Grid_Product_Block">
.
.
.<!--Тут контент блока-->
.
.
</div>


Вот что я делал в js:

$("#Product_Block").toggleClass("Grid_Product_Block").toggleClass("List_Products_Block");


Не было предела моему счастью когда я увидел первый товар на странице - его классы изменились.

Пролистав страниц чуть ниже я обламался, так как остальные блоки с товарами остались без изменений.

Логично так как классы поменялись только у первого товара из-за того, что у каждого товара был одинаковый ID (Product_Block), который должен быть уникален на странице.

Вот и вопрос - как это сделать, точнее с помощью чего и какова схема действий.

Писать за меня не обязательно (но буду благодарен за элементарный пример) укажите в сторону каких функций смотреть, если подобное делается не с помощью toggleClass.

Благодарю за внимание господа, и уповаю на вашу поддержку.
Ответить с цитированием
  #2 (permalink)  
Старый 13.06.2015, 14:12
Аватар для Sigizmund2012
Профессор
Отправить личное сообщение для Sigizmund2012 Посмотреть профиль Найти все сообщения от Sigizmund2012
 
Регистрация: 16.07.2014
Сообщений: 267

Neibo,
Так попробуйте вместо id использовать class для отбора элементов в коллекцию:
$(".Product_Block").toggleClass("Grid_Product_Block").toggleClass("List_Products_Block");

Естественно на сервере надо обеспечить вывод товаров с этим классом, а не id.
Ответить с цитированием
  #3 (permalink)  
Старый 13.06.2015, 14:23
Новичок на форуме
Отправить личное сообщение для Neibo Посмотреть профиль Найти все сообщения от Neibo
 
Регистрация: 13.06.2015
Сообщений: 3

Логично, конечно. Но, в моем примере id Product_Block не имеет никаких стилей а служит лишь идентификатором для js.

Только что попробовал использовать:

<div class="Product_Block" class="Grid_Product_Block">


и

$(".Product_Block").toggleClass("Grid_Product_Block").toggleClass("List_Products_Block");


= Работает! Но до переключения блоки товара отображаются коряво, как будто часть стилей отсутствует. Подозреваю, что это из-за того, что у класса Product_Block нет стилей вообще и использую я его, опять таки, как "идентификатор" для js.

Спасибо за ответ, уже ближе к истине.
Ответить с цитированием
  #4 (permalink)  
Старый 13.06.2015, 14:36
Аватар для Sigizmund2012
Профессор
Отправить личное сообщение для Sigizmund2012 Посмотреть профиль Найти все сообщения от Sigizmund2012
 
Регистрация: 16.07.2014
Сообщений: 267

<div class="Product_Block Grid_Product_Block">

Должно заработать. По Product_Block отсеиваете, Grid_Product_Block переключаете.
Ответить с цитированием
  #5 (permalink)  
Старый 13.06.2015, 14:58
Новичок на форуме
Отправить личное сообщение для Neibo Посмотреть профиль Найти все сообщения от Neibo
 
Регистрация: 13.06.2015
Сообщений: 3

Точно! Все заработало, спасибо Вам огромное!
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Замена класса serdef Элементы интерфейса 2 01.01.2014 21:44
Замена класса элемента razorg1991 Элементы интерфейса 8 23.09.2013 21:08
Возможна замена класса (для работы с фреймворком css)? Faab jQuery 4 16.06.2013 03:39
Использование классов в JavaScript devote Ваши сайты и скрипты 70 01.02.2013 17:17
Замена CSS класса каждого четвертого div iGusse jQuery 4 17.12.2009 23:51