2015-04-04 1 views
0

У меня есть рабочий JavaScript, который просто очень не элегантно и громоздким:Как переписать Javascript Условный оператор выбора классов вместо идентификаторов в HTML

//check if certain div (with higher main id) is clicked and then run a script 

if (item.content.attr("id") == 'gridgallery1') { 
    $('#grid1').grid(); // GALLERY initialisaion 
} 
if (item.content.attr("id") == 'gridgallery2') { 
    $('#grid2').grid(); // GALLERY initialisaion 
} 
if (item.content.attr("id") == 'gridgallery3') { 
    $('#grid3').grid(); // GALLERY initialisaion 
} 

Сопровождающие рабочий HTML-код:

<div id="gridgallery1"> 
    <div id="grid1" data-directory="IMAGES/FIRST GALLERY"></div> 
</div> 

<div id="gridgallery2"> 
<div id="grid2" data-directory="IMAGES/SECOND GALLERY"></div> 
</div> 

<div id="gridgallery3"> 
    <div id="grid3" data-directory="IMAGES/THIRDGALLERY"></div> 
</div> 

Вопрос 1. Я хочу переписать выше If-заявление в одном коротком элегантном заявлении If-, верно для всех случаев, охватывающих ничего от 'grid1' и 'gridgallery1' до 'grid99' и 'gridgallery99') Как переписать вышеприведенное If-Statement?


Вопрос 2. Возможно, лучше было бы иметь multple классов вместо идентификаторов. Я думал, что я мог бы изменить «идентификатор» в «класс» sothat мне не нужно, чтобы изменить HTML-код, в первую очередь для каждой добавленной галереи контейнер, но если я изменю:

if (item.content.attr("id") в if (item.content.attr("class")

тогда он больше не работает! Я действительно хочу просто оператор javascript If, который находит все эти экземпляры и (все divs с этими классами) и запускает скрипт.

<div class="gridgallery"> 
    <div class="grid" data-directory="IMAGES/FIRST GALLERY"></div> 
</div> 

<div class="gridgallery"> 
    <div class="grid" data-directory="IMAGES/SECOND GALLERY"></div> 
</div> 

<div class="gridgallery"> 
    <div class="grid" data-directory="IMAGES/THIRDGALLERY"></div> 
</div> 

ответ

1

Вопрос 1: Предполагая, что в item.content запоминании JQuery-выбранный элемент:

$('#grid' + item.content.attr('id').split('gridgallery')[1]).grid(); 

Вопрос 2:

я не уверен, что вы пытаетесь но вы должны прочитать о некоторых удобных методах jQuery, таких как $('#someElement').hasClass('some-class'), который возвращает true или false

+0

смотрите обновленный вопрос 2 мата. Я могу заменить весь оператор if одной строкой? (это не работает). Я думал, что решение появилось в форме «if-statement». Благодаря! – Sam

+0

нет, если необходимо! эта строка просто вызывает 'grid()' на #grid + все, что приходит после gridgallery. Посмотрите, как работает '.split()', чтобы лучше понять. –

1

С HTML вы показываете в разделе «Вопрос 2», вы должны быть в состоянии заменить if-оператор с помощью следующей строки:

item.content.find('.grid').grid(); // GALLERY initialisaion 
+0

спасибо, но мне непонятно, какая часть заменить в javascript точно, пожалуйста, предложите переписанный javascript – Sam

+0

@Sam - Это переписанный JavaScript. Как я уже сказал в своем ответе, вы можете заменить if-statements этой строкой кода. –

Смежные вопросы