2015-05-12 2 views
0

Когда мое адаптированным-для-не-яваскрипта загрузки страницы, один из стилей, загруженных это:изменение значения CSS с JQuery

//accordion open 
.accordionItemCollapsed, .accordionItem.is-collapsed { 
    max-height: 100%; 
} 

Таким образом, мой аккордеон все открытый и содержание открыто для пользователей, не имеющее JavaScript.

Но когда пользователь, который имеет JavaScript с поддержкой посещений сайта, я хотел бы значение, которое будет автоматически изменен следующим образом:

//accordion collapsed 
.accordionItemCollapsed, .accordionItem.is-collapsed { 
    max-height: 0; 
} 

Как лучше всего сделать это с помощью JQuery?

Это, вероятно, довольно элементарно, но я новичок в jquery/JS и немного потерял поисковые запросы для решений, потому что все поисковые запросы, похоже, применимы к гораздо более сложным случаям.

+0

В чем цель тега 'swap'? 'Это, вероятно, довольно элементарно, но я новичок в jquery/JS и немного потерял поисковые запросы для решений, потому что все поисковые запросы, похоже, применимы к гораздо более сложным случаям.« Ваши исследования должны были привести к соответствующему методу 'css()' , вот DOC: http://api.jquery.com/css/ –

ответ

3

Вместо того, чтобы менять или вводить css, я предлагаю добавить класс body/html/container no-js, а затем удалить его с помощью jquery.

Ваш CSS будет выглядеть следующим образом

.accordionItemCollapsed, .accordionItem.is-collapsed { 
    max-height: 0; 
} 

.no-js .accordionItemCollapsed, .no-js .accordionItem.is-collapsed { 
    max-height: 100%; 
} 

Jquery очень прост

$('html').removeClass('no-js'); 

Такой подход является гораздо более эффективным, чем запрашивая РОМ для всех аккордеонов, а затем изменить свойство стиля каждый элемент.

В дополнение к этому, это можно использовать повторно для других частей веб-сайта, где вам нужно иметь разные стили, если js недоступен.

+0

Если вы добавите этот класс в элемент HTML, вы можете поместить сценарий удаления класса в раздел главы и не обернуть его внутри события document.ready. Принимает во внимание проблемы FOUC. –

+0

Вы совершенно правы, обновили мой ответ – Dogoku

+0

@dogoku @salman Отлично, это работает! Однако я заметил нечто особенное. Я использую wordpress, поэтому я помещаю строку jQuery в свой собственный файл (так как он должен идти в заголовке) и корректно устанавливает его как зависимость jQuery. Когда этот файл содержит только '$ ('html'). RemoveClass ('no-js');' Я не получаю FOUC. Но когда я пытаюсь использовать jQuery (function() { jQuery ('html'). RemoveClass ('no-js'); }); '(потому что я изначально считал, что мне нужна функция). Я получаю примерно 1/2 секунды FOUC. Это нормально? Завершает ли он ее как функцию сделать ее намного медленнее? – pastic

1

Вы не можете изменить определение класса. Если вы хотите изменить свойство элемента:

$('.accordionItemCollapsed, .accordionItem.is-collapsed').css('max-height', 0); 

Установите один или несколько свойств CSS для набора совпавших элементов.

Docs: http://api.jquery.com/css/#css2

Если вы хотите, чтобы перезаписать свойства всех элементов (Не рекомендуемые):

$('body').append('<style>.accordionItemCollapsed, .accordionItem.is-collapsed { max-height: 0; } </style>'); 

Я советую вам Шоуда воспользоваться open/close событий от аккордеона:

// accordion open event callback 
$('.accordionItemCollapsed, .accordionItem.is-collapsed').css('max-height', '100%'); 

// accordion close event callback 
$('.accordionItemCollapsed, .accordionItem.is-collapsed').css('max-height', 0); 
+0

Down-Voters добавили здесь комментарии, почему вы проголосовали – Tushar

1
$('.accordionItemCollapsed, .accordionItem.is-collapsed').css('max-height', 0); 
1

вам не нужно jQuery для выполнения этой задачи, это добавит лишние накладные расходы в ваше приложение.

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

document.getElementsByClassName("accordionItemCollapsed accordionItem.is-collapsed").style.maxWidth = "0px"; 
+0

Я положил его в или непосредственно перед, я не могу заставить его работать. Это фрагмент, который я использую: ' ' – pastic

0

Попробуйте

$('.accordionItemCollapsed, .accordionItem.is-collapsed').css('max-height', 0); 

метод CSS принимает два параметра, первое свойство стиля в вашем случае max-height и второе значение в вашем случае 0.