JQuery hover и селектор классов
Я не хочу менять фоновый цвет div динамически, используя следующие HTML, CSS и javascript.
HTML:
<div id="menu">
<div class="menuItem"><a href=#>Bla</a></div>
<div class="menuItem"><a href=#>Bla</a></div>
<div class="menuItem"><a href=#>Bla</a></div>
</div>
CSS
.menuItem{
display:inline;
height:30px;
width:100px;
background-color:#000;
JavaScript:
$('.menuItem').hover( function(){
$(this).css('background-color', '#F00');
},
function(){
$(this).css('background-color', '#000');
});
EDIT: Я забыл сказать, что у меня были причины не хотеть использовать способ css.
И я действительно забыл проверить, загружена ли DOM.
Ответы
Ответ 1
Ваш код выглядит хорошо для меня.
Убедитесь, что DOM готов, прежде чем ваш javascript будет выполнен с помощью функции jQuery $(обратного вызова):
$(function() {
$('.menuItem').hover( function(){
$(this).css('background-color', '#F00');
},
function(){
$(this).css('background-color', '#000');
});
});
Ответ 2
Я бы предложил не использовать JavaScript для такого простого взаимодействия. CSS способен это сделать (даже в Internet Explorer 6), и он будет гораздо более отзывчивым, чем выполнение с помощью JavaScript.
Вы можете использовать псевдокласс ": hover" CSS, но чтобы он работал с Internet Explorer 6, вы должны использовать его в элементе "a".
.menuItem
{
display: inline;
background-color: #000;
/* width and height should not work on inline elements */
/* if this works, your browser is doing the rendering */
/* in quirks mode which will not be compatible with */
/* other browsers - but this will not work on touch mobile devices like android */
}
.menuItem a:hover
{
background-color:#F00;
}
Ответ 3
Это может быть достигнуто в CSS с использованием псевдо-класса: hover. (: hover не работает на <div>
в IE6)
HTML:
<div id="menu">
<a class="menuItem" href=#>Bla</a>
<a class="menuItem" href=#>Bla</a>
<a class="menuItem" href=#>Bla</a>
</div>
CSS
.menuItem{
height:30px;
width:100px;
background-color:#000;
}
.menuItem:hover {
background-color:#F00;
}
Ответ 4
test.html
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en">
<head>
<title>jQuery Test</title>
<link rel="stylesheet" type="text/css" href="test.css" />
<script type="text/javascript" src="jquery.js"></script>
<script type="text/javascript" src="test.js"></script>
</head>
<body>
<div id="menu">
<div class="menuItem"><a href=#>Bla</a></div>
<div class="menuItem"><a href=#>Bla</a></div>
<div class="menuItem"><a href=#>Bla</a></div>
</div>
</body>
</html>
test.css
.menuItem
{
display: inline;
height: 30px;
width: 100px;
background-color: #000;
}
test.js
$( function(){
$('.menuItem').hover( function(){
$(this).css('background-color', '#F00');
},
function(){
$(this).css('background-color', '#000');
});
});
Работы: -)
Ответ 5
Так как это меню, вы также можете перейти на следующий уровень и очистить HTML и сделать его более семантическим с помощью элемента списка:
HTML:
<ul id="menu">
<li><a href="#">Bla</a></li>
<li><a href="#">Bla</a></li>
<li><a href="#">Bla</a></li>
</ul>
CSS
#menu {
margin: 0;
}
#menu li {
float: left;
list-style: none;
margin: 0;
}
#menu li a {
display: block;
line-height:30px;
width:100px;
background-color:#000;
}
#menu li a:hover {
background-color:#F00;
}
Ответ 6
На стороне примечание это более эффективно:
$(".menuItem").hover(function(){
this.style.backgroundColor = "#F00";
}, function() {
this.style.backgroundColor = "#000";
});
Ответ 7
Я предпочитаю foxy-ответ, потому что мы никогда не должны использовать javascript, когда существующие свойства css создаются для задания.
Не забудьте добавить display: block ;
в .menuItem
, поэтому учитываются высота и ширина.
edit: лучше script/look & feel disoupling, если вам когда-либо понадобится изменить стиль через jQuery, я бы определил дополнительный класс css и использовал $(...).addClass("myclass")
и $(...).removeClass("myclass")
Ответ 8
Если кто-то читает исходный вопрос, чтобы означать, что они хотят динамически изменять наклон css, а не просто изменить базовое правило CSS для элемента, я нашел, что это работает:
У меня динамически загружаемая страница, которая требует от меня узнать, насколько высок контейнер после загрузки данных. После загрузки я хочу изменить эффект наведения css, чтобы элемент закрывал полученный контейнер. Мне нужно изменить правило css.daymark: hover, чтобы иметь новую высоту. Вот как...
function changeAttr(attrName,changeThis,toThis){
var mysheet=document.styleSheets[1], targetrule;
var myrules=mysheet.cssRules? mysheet.cssRules: mysheet.rules;
for (i=0; i<myrules.length; i++){
if(myrules[i].selectorText.toLowerCase()==".daymark:hover"){ //find "a:hover" rule
targetrule=myrules[i];
break;
}
}
switch(changeThis)
{
case "height":
targetrule.style.height=toThis+"px";
break;
case "width":
targetrule.style.width=toThis+"px";
break;
}
}
Ответ 9
Я только что закодировал пример в jQuery о том, как создавать наложения div над переключателями для создания компактного, интерактивного, но простого плагина выбора цвета для jQuery
http://blarnee.com/wp/jquery-colour-selector-plug-in-with-support-for-graceful-degradation/
Ответ 10
Всегда сохраняйте все легко и просто, создавая класс
.bcolor {background: # F00; }
ТОГДА ИСПОЛЬЗУЙТЕ addClass() и removeClass(), чтобы закончить его