JQuery brooks 伪类:执行脚本后悬停
JQuery brokes pseudoclass :hover after executing script
我在使用 JQuery 时遇到了一些麻烦。网站上有 li 标签,它具有以下样式:
li { margin: 0; padding: 0; clear: both;}
li:hover {background-color: #FFFFFF; margin: 0; padding: 0; clear: both;}
当有人试图点击这个元素时,它的颜色变为静态,代码如下:
$('.li-element-class').css('background-color','#FFFFFF');
然后第二次点击就变成了这样:
$('.li-element-class').css('background-color','inherit'); // also tried 'none' and 'transparent'
问题是在该操作之后,伪 class li:hover 停止工作,当光标悬停在元素上时,元素不会改变它的颜色...
Google 无法提出任何解决方案,所以我希望 Whosebug 知道 :)
这里是HTML代码:
<li id="categoryButton22"><span class="menuico"></span><div style="width:70%;display:inline-block;"><a class="showMenuCover" category="22" parentcategory="1" style="color: rgb(0, 0, 0);">Садовая столовая мебель</a></div><div id="subCategoryGlyph22" style="display:none; padding-right:3px; float:right;"><span class="glyphicon glyphicon-menu-right"></span></div></li>
和所有 JQuery 代码:
$(document).ready(function(){
/*
Ця змінна потрібна для перевірки, щоб гарно перевідкривати панель,
коли користувач переходить на ыншу категорыю при выдкритій панелі.
*/
var previousCategoryClicked = '';
var previousGlyphArrow = '';
var previousCategoryButton = '';
/*
Функція, яка керує панелькою меню та контентом в ній
*/
$('.showMenuCover').click(function(){
// Виносимо дані з атрибутів тегу в окремі змінні, так простіше в подальшому
var parentCategory = $(this).attr('parentCategory');
var parentCategoryButton = '.parentCat'+parentCategory;
var CategoryID = $(this).attr('category');
var glyphArrow = '#subCategoryGlyph'+CategoryID;
var categoryButton = '#categoryButton'+CategoryID;
// Обчислення висоти елемента li для виставлення адекватних відступів гліфові
var buttonHeight = $(categoryButton).height();
if(buttonHeight > 10) {
var marginGlyph = buttonHeight / 2 - 7;
}
else {
var marginGlyph = buttonHeight / 2 - 2;
}
/*
Далі перевіряємо чи відкрита панель з меню.
Якщо відкрита, то просто ховаємо її, якщо закрита то відкриваємо її і втягуємо контент через AJAX.
Перед цим виконуємо додаткову перевірку за допомогою змінної previousCategoryClicked.
За допомогою неї перевіряємо чи є панель відкрита, якщо користувач клікнув на іншу категорію.
*/
if(previousCategoryClicked != CategoryID && $('.menu-cover').css('display') == 'block') {
$('.menu-cover').fadeOut('fast');
$(previousGlyphArrow).fadeOut('fast');
$(previousCategoryButton).css('background-color', 'inherit');
$('.menu-cover').fadeIn('fast');
$(glyphArrow).fadeIn('fast');
$(glyphArrow).css('margin-top', marginGlyph);
$(categoryButton).css('background-color', 'white');
}
else {
if ($('.menu-cover').css('display') == 'none') {
$('.menu-cover').fadeIn();
$(glyphArrow).fadeIn();
$(glyphArrow).css('margin-top', marginGlyph);
$(categoryButton).css('background-color', 'white');
}
else {
$('.menu-cover').fadeOut();
$(glyphArrow).fadeOut();
$(categoryButton).css('background-color', 'inherit');
}
}
previousCategoryClicked = CategoryID;
previousGlyphArrow = glyphArrow;
previousCategoryButton = categoryButton;
});
});
使用 jQuery 的 .css()
方法应该是执行任何操作的最后手段。相反,您应该通过 类:
更改元素的外观
$(document).ready(function() {
$('li').on('click', function() {
if ($(this).hasClass('white-background')) {
$(this).removeClass('white-background');
} else {
$(this).addClass('white-background');
}
});
});
body {
background-color:#ccc;
}
li {
margin: 0;
padding: 0;
clear: both;
}
li:hover {
background-color: #FFFFFF;
margin: 0;
padding: 0;
clear: both;
}
.white-background {
background-color: #FFFFFF;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<body>
<ul>
<li class="li-element-class">
1
</li>
<li class="li-element-class">
2
</li>
</ul>
</body>
我在使用 JQuery 时遇到了一些麻烦。网站上有 li 标签,它具有以下样式:
li { margin: 0; padding: 0; clear: both;}
li:hover {background-color: #FFFFFF; margin: 0; padding: 0; clear: both;}
当有人试图点击这个元素时,它的颜色变为静态,代码如下:
$('.li-element-class').css('background-color','#FFFFFF');
然后第二次点击就变成了这样:
$('.li-element-class').css('background-color','inherit'); // also tried 'none' and 'transparent'
问题是在该操作之后,伪 class li:hover 停止工作,当光标悬停在元素上时,元素不会改变它的颜色...
Google 无法提出任何解决方案,所以我希望 Whosebug 知道 :)
这里是HTML代码:
<li id="categoryButton22"><span class="menuico"></span><div style="width:70%;display:inline-block;"><a class="showMenuCover" category="22" parentcategory="1" style="color: rgb(0, 0, 0);">Садовая столовая мебель</a></div><div id="subCategoryGlyph22" style="display:none; padding-right:3px; float:right;"><span class="glyphicon glyphicon-menu-right"></span></div></li>
和所有 JQuery 代码:
$(document).ready(function(){
/*
Ця змінна потрібна для перевірки, щоб гарно перевідкривати панель,
коли користувач переходить на ыншу категорыю при выдкритій панелі.
*/
var previousCategoryClicked = '';
var previousGlyphArrow = '';
var previousCategoryButton = '';
/*
Функція, яка керує панелькою меню та контентом в ній
*/
$('.showMenuCover').click(function(){
// Виносимо дані з атрибутів тегу в окремі змінні, так простіше в подальшому
var parentCategory = $(this).attr('parentCategory');
var parentCategoryButton = '.parentCat'+parentCategory;
var CategoryID = $(this).attr('category');
var glyphArrow = '#subCategoryGlyph'+CategoryID;
var categoryButton = '#categoryButton'+CategoryID;
// Обчислення висоти елемента li для виставлення адекватних відступів гліфові
var buttonHeight = $(categoryButton).height();
if(buttonHeight > 10) {
var marginGlyph = buttonHeight / 2 - 7;
}
else {
var marginGlyph = buttonHeight / 2 - 2;
}
/*
Далі перевіряємо чи відкрита панель з меню.
Якщо відкрита, то просто ховаємо її, якщо закрита то відкриваємо її і втягуємо контент через AJAX.
Перед цим виконуємо додаткову перевірку за допомогою змінної previousCategoryClicked.
За допомогою неї перевіряємо чи є панель відкрита, якщо користувач клікнув на іншу категорію.
*/
if(previousCategoryClicked != CategoryID && $('.menu-cover').css('display') == 'block') {
$('.menu-cover').fadeOut('fast');
$(previousGlyphArrow).fadeOut('fast');
$(previousCategoryButton).css('background-color', 'inherit');
$('.menu-cover').fadeIn('fast');
$(glyphArrow).fadeIn('fast');
$(glyphArrow).css('margin-top', marginGlyph);
$(categoryButton).css('background-color', 'white');
}
else {
if ($('.menu-cover').css('display') == 'none') {
$('.menu-cover').fadeIn();
$(glyphArrow).fadeIn();
$(glyphArrow).css('margin-top', marginGlyph);
$(categoryButton).css('background-color', 'white');
}
else {
$('.menu-cover').fadeOut();
$(glyphArrow).fadeOut();
$(categoryButton).css('background-color', 'inherit');
}
}
previousCategoryClicked = CategoryID;
previousGlyphArrow = glyphArrow;
previousCategoryButton = categoryButton;
});
});
使用 jQuery 的 .css()
方法应该是执行任何操作的最后手段。相反,您应该通过 类:
$(document).ready(function() {
$('li').on('click', function() {
if ($(this).hasClass('white-background')) {
$(this).removeClass('white-background');
} else {
$(this).addClass('white-background');
}
});
});
body {
background-color:#ccc;
}
li {
margin: 0;
padding: 0;
clear: both;
}
li:hover {
background-color: #FFFFFF;
margin: 0;
padding: 0;
clear: both;
}
.white-background {
background-color: #FFFFFF;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<body>
<ul>
<li class="li-element-class">
1
</li>
<li class="li-element-class">
2
</li>
</ul>
</body>