#jquery #css
#jquery #css
Вопрос:
Это должно быть просто, но я просто не могу заставить его работать
Мой список
<div id="ctMenu">
<ul>
<li><a href="#">WELCOME</a></li>
<li><a href="#">ABOUT US</a></li>
<li><a href="#">CONTACT</a></li>
</ul></div>
Мой CSS
#ctMenu { width:1010px; margin: 20px 0 0 0; padding:20px 0 20px 0}
#ctMenu ul { margin:0; padding:0;}
#ctMenu ul li { margin-left: 0; margin-bottom:0; display:inline;}
#ctMenu ul li a { padding: 10px 25px 9px 25px; background-color:green; text-decoration: none; color:Black; font-weight:bold; }
#ctMenu ul li a:hover {background-color:Gray; }
.selected { background-color: yellow; }
Мой jQuery
$(document).ready(function () {
$('#ctMenu ul li a').click(function () {
$('#ctMenu ul li a').removeClass('selected');
$(this).addClass('selected');
});
});
Я просто пытаюсь установить для css класс «.selected», когда кто-то нажимает на ссылку. Есть предложения?
РЕДАКТИРОВАТЬ: вот JSFiddle
Комментарии:
1. в вашем jsfiddle вы не выбрали включение библиотеки jquery, поэтому класс ‘selected’ не добавляется к вашей ссылке. и, как определено в приведенных ниже ответах, ваш css является виновником того, что стиль не отображается.
2. @Sander — Спасибо! Я увидел это, изменил его, и он все еще не работал. Я думаю, что я оставил закрывающий div в jsfiddle.
3. @MarkB: Для справки обратитесь к исправлению, которое я тоже дал.
Ответ №1:
Проблема в том, что вы объявили более сильное правило CSS #ctMenu ul li a
, которое переопределяет .selected
. Попробуйте это правило CSS вместо:
#ctMenu ul li a.selected { background-color: yellow; }
Комментарии:
1. Он по-прежнему не добавляет «выбранный» класс в мою ссылку
2. ДА… это так. Я, должно быть, просто не знаю, как использовать jsFiddle или что-то в этом роде. Спасибо за вашу помощь!
3. @Marian amp; @Mark: небольшое обновление .. это изменение не требуется.. Марк упомянул, что CSS в порядке, и если он заменит строку на
$('#ctMenu ul li a').removeClass('selected').removeAttr("class");
эту, тогда это сработает.. Это я протестировал в Firefox с помощью плагина firebug .4. Шива, я предлагаю тебе сначала попытаться понять, что пытается сделать марк. Он не сказал, что с CSS все в порядке, он просто сказал, что это не работает. Предложенное вами решение не решает проблему, и, кроме того, нет необходимости избавляться от атрибута class.
5. @Interstellar_Coder: Спасибо за публикацию. Когда я тестирую его с помощью Firebug , я вижу, что атрибут класса все еще существует. Если пользовательский интерфейс работает нормально, но серверная часть отображается неправильно. Именно по этой причине я предоставил решение, в котором атрибут класса удаляется при нажатии на другую ссылку. Я чувствую, что так должно работать. Если я ошибаюсь, пожалуйста, исправьте. Я никому не указываю, что они ошибаются, просто даю свое решение, которое может помочь полностью заполнить код всех ангелов.
Ответ №2:
вот рабочая скрипка.
чтобы понять это, вы должны прочитать о специфике.
Обратите внимание, что #ctMenu ul li a.selected { background-color: yellow }
это более конкретно, чем .выбрано, и именно поэтому оно работает.
Комментарии:
1. Спасибо за ссылку на спецификацию
Ответ №3:
На этот раз я полностью протестирован на Firebug, он работает нормально..
Замените это
$('#ctMenu ul li a').removeClass('selected');
Для
$('#ctMenu ul li a').removeClass('selected').removeAttr("class");
Причина этого изменения заключается в следующем: — на данный момент атрибут класса все еще существует и class="selected"
меняется при нажатии на пользователя. Но если вы добавите .removeAttr("class")
, то при нажатии на другую ссылку существующий атрибут класса будет удален. Ваш код будет полностью дополнен..
вы можете протестировать это с помощью FireBug в Firefox
Комментарии:
1. Где вы добавляете «выбранный» класс в <a /> ?
2. Ваш код остается прежним. Вам нужно заменить указанную строку на ту, которую я упомянул. Попробуйте это и дайте мне знать ваши отзывы
3. имейте в виду, что этот код хорош в этой ситуации, но его нужно использовать с осторожностью … если дизайнер создает тему для вашего сайта и добавляет новый класс к определенным элементам (кто знает, по какой причине), ваш removeAttr («класс») также удалит другие классы … ядумаю, вам нужно использовать это, по крайней мере, с осторожностью..