2009-08-28 2 views
0

У меня есть несколько элементов сообщения, которые попадают парами: Если показан элемент A1, то A2 должен быть скрытым, то же самое для B1/B2, C1/C2 и т. Д. на. У меня есть код JQuery работает, но он получает многословный:Использование jQuery для отображения только одной пары элементов

if (conditionA) { 
    $("#a1").show(); 
    $("#a2").hide(); 
else { 
    $("#a1").hide(); 
    $("#a2").show(); 
} 

if (conditionB) { 
    $("#b1").show(); 
    $("#b2").hide(); 
else { 
    $("#b1").hide(); 
    $("#b2").show(); 
} 

//etc... 

Это кажется громоздким и Дурманящим. Есть ли лучший способ инкапсулировать представление о том, что эти элементы спарены и должны показывать/скрывать друг друга? Я посмотрел на переключатель, но это неправильно.

+3

Как выглядит ваш HTML-код? Может быть, есть способ организовать HTML, чтобы уменьшить этот повторяющийся код. – SolutionYogi

+1

@Ned, только fyi, но toggle также имеет возможность переключаться между двумя функциями, сохраняя состояние внутри. например $ ("# id"). toggle (function() {alert ("hi");}, function() {alert ("bye");}); Я чувствовал себя неудовлетворенным тем, что не упоминал об этом, чтобы у вас было больше информации в будущем. – Marc

ответ

0

Вот что я в конечном итоге делает:

Я организовал HTML, чтобы иметь пару элементов спаренных под новым родителем для называния целей:

<p id="first_flap"><span class="flap">MsgA1</span><span class="flap">MsgA2</span></p> 
<p id="second_flap"><span class="flap">MsgB1</span><span class="flap">MsgB2</span></p> 

Каждый из пары имеет класс «лоскут» на нем. Тогда я могу написать функцию:

function flip_flap(sel, cond) { 
    /* Find sel, then show flaps within it according to cond. */ 
    var flaps = jQuery(sel + ">.flap"); 
    var f0 = jQuery(flaps[0]); 
    (cond ? f0.show() : f0.hide()); 
    var f1 = jQuery(flaps[1]); 
    (cond ? f1.hide() : f1.show()); 
} 

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

Тогда я могу заменить мой оригинальный Javascript с:

flip_flap("#first_flap", conditionA); 
flip_flap("#second_flap", conditionB); 

Гораздо более кратким! Благодарю.

+0

'toggle' маршруты' hide' и 'show', которые обрабатывают как блок, так и встроенные элементы (по крайней мере, в 1.3.2). В какой версии вы используете, где вы не можете переключать встроенные элементы? –

+0

Хм, похоже, я использую 1.2.6, возможно, мне нужно обновить ... –

0

Я бы организовал ваш html, чтобы вы могли использовать родных братьев() и toggle().

+1

Можете ли вы показать пример? Имейте в виду, я не хочу вообще менять состояние divs: мое понимание переключения состояло в том, что он исследовал текущее состояние и перевернулся между скрыть и показать. Я мог бы запустить свой код, и условия все равно, как в прошлый раз, и ничего не изменилось. –

3

На самом деле toggleможет помочь вам здесь, если вы используете дополнительный switch параметра.

$("#a1").toggle(conditionA); 
$("#a2").toggle(!conditionA); 

$("#b1").toggle(conditionB); 
$("#b2").toggle(!conditionB); 
+0

Ах! Я неправильно понял, что означал параметр toggle. –

+0

Здесь нужно перевернуть '!'. Toggle * скрывает * элемент, если переключатель 'true', а не наоборот. –

+0

Приносим извинения, возможно, я должен был проверить документацию самостоятельно! Исправлена. –

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