jQuery 如果 hasClass 不起作用
jQuery if hasClass does not work
我正在努力检查元素是否具有特定的 class 并因此执行操作。我可以设法显示一个元素(但不能隐藏它),但是一旦我应用 IF 语句,它就不再起作用了。
作品:
function showmenu() {
$('#sidebar-menu').removeClass('hidemenu');
$('#sidebar-menu').addClass('showmenu');
}
无效:
function showmenu() {
if ($('#sidebar-menu').hasClass('hidemenu')) {
$('#sidebar-menu').removeClass('hidemenu');
$('#sidebar-menu').addClass('showmenu');
}
if ($('#sidebar-menu').hasClass('showmenu')) {
$('#sidebar-menu').removeClass('showmenu');
$('#sidebar-menu').addClass('hidemenu');
}
}
.hidemenu {
opacity: 0;
visibility: hidden;
transition: all 1s ease;
-moz-transition: all 1s ease;
-ms-transition: all 1s ease;
-webkit-transition: all 1s ease;
-o-transition: all 1s ease;
}
.showmenu {
opacity: 1;
visibility: visible;
transition: all 1s ease;
-moz-transition: all 1s ease;
-ms-transition: all 1s ease;
-webkit-transition: all 1s ease;
-o-transition: all 1s ease;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<a href="#" title="" onclick="return false" onmousedown="javascript:showmenu();">Open Menu</a>
试试这个:)
与其使用多个 classes,不如假设隐藏状态是菜单的默认状态。然后,您只需应用一个 class 来实际切换菜单。
希望对您有所帮助。 :)
function showMenu() {
$('#menu').toggleClass('show');
}
$('a').on('click', function() {
showMenu();
});
#menu {
opacity: 0;
visibility: hidden;
transition: all 1s ease;
-moz-transition: all 1s ease;
-ms-transition: all 1s ease;
-webkit-transition: all 1s ease;
-o-transition: all 1s ease;
}
#menu.show {
opacity: 1;
visibility: visible;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<a href="#" title="">Open Menu</a>
<div id="menu">HI, MENU HERE</div>
您的代码中的问题来自条件,您没有使用 else
语句,因此如果您的元素具有 class hidemenu``and the class will be changed two times, the first condition will add the class
showmenu[=14,则这两个条件都会触发=]else` 你的逻辑:
function showmenu() {
if($('#sidebar-menu').hasClass('hidemenu')){
$('#sidebar-menu').removeClass('hidemenu');
$('#sidebar-menu').addClass('showmenu');
} else if($('#sidebar-menu').hasClass('showmenu')){
$('#sidebar-menu').removeClass('showmenu');
$('#sidebar-menu').addClass('hidemenu');
} // end if has class
} // end function
注意 : 有效的方法是使用 toggleClass()
:
$('a').click( function(e) {
e.preventDefault(); //Prevent the default action
$('#sidebar-menu').toggleClass('hidemenu showmenu');
});
希望这对您有所帮助。
您的逻辑存在问题是因为您有两个单独的 if
语句。第一个添加 showmenu
class 如果它不在元素上。第二个然后检测到您刚刚添加的 class 现在在元素上并再次将其删除。最终结果是什么都没有发生。
要解决此问题,请将逻辑加入到单个 if/else
语句中,或者更好的是,使用 toggleClass()
,如下所示:
$('a').click(function(e) {
e.preventDefault();
$('#sidebar-menu').toggleClass('hidemenu showmenu');
});
.hidemenu {
opacity: 0;
transition: opacity 1s ease;
-moz-transition: opacity 1s ease;
-ms-transition: opacity 1s ease;
-webkit-transition: opacity 1s ease;
-o-transition: opacity 1s ease;
}
.showmenu {
opacity: 1;
transition: opacity 1s ease;
-moz-transition: opacity 1s ease;
-ms-transition: opacity 1s ease;
-webkit-transition: opacity 1s ease;
-o-transition: opacity 1s ease;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<a href="#" title="">Open Menu</a>
<div id="sidebar-menu" class="hidemenu">
Menu goes here...
</div>
注意使用不显眼的事件处理程序,并且仅指定 opacity
CSS 属性 进行动画处理而不是提供 all
.
使用 toggleClass
更简洁的代码
$('button').mouseover(function() {
$('#menu').toggleClass('hide');
});
.hide {
display:none
}
<button>mouse over</button>
<div class='hide' id='menu'>Menu</div>
<script
src="https://code.jquery.com/jquery-3.1.1.min.js"
integrity="sha256-hVVnYaiADRTO2PzUGmuLJr8BLUSjGIZsDYGmIJLv2b8="
crossorigin="anonymous"></script>
我正在努力检查元素是否具有特定的 class 并因此执行操作。我可以设法显示一个元素(但不能隐藏它),但是一旦我应用 IF 语句,它就不再起作用了。
作品:
function showmenu() {
$('#sidebar-menu').removeClass('hidemenu');
$('#sidebar-menu').addClass('showmenu');
}
无效:
function showmenu() {
if ($('#sidebar-menu').hasClass('hidemenu')) {
$('#sidebar-menu').removeClass('hidemenu');
$('#sidebar-menu').addClass('showmenu');
}
if ($('#sidebar-menu').hasClass('showmenu')) {
$('#sidebar-menu').removeClass('showmenu');
$('#sidebar-menu').addClass('hidemenu');
}
}
.hidemenu {
opacity: 0;
visibility: hidden;
transition: all 1s ease;
-moz-transition: all 1s ease;
-ms-transition: all 1s ease;
-webkit-transition: all 1s ease;
-o-transition: all 1s ease;
}
.showmenu {
opacity: 1;
visibility: visible;
transition: all 1s ease;
-moz-transition: all 1s ease;
-ms-transition: all 1s ease;
-webkit-transition: all 1s ease;
-o-transition: all 1s ease;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<a href="#" title="" onclick="return false" onmousedown="javascript:showmenu();">Open Menu</a>
试试这个:)
与其使用多个 classes,不如假设隐藏状态是菜单的默认状态。然后,您只需应用一个 class 来实际切换菜单。
希望对您有所帮助。 :)
function showMenu() {
$('#menu').toggleClass('show');
}
$('a').on('click', function() {
showMenu();
});
#menu {
opacity: 0;
visibility: hidden;
transition: all 1s ease;
-moz-transition: all 1s ease;
-ms-transition: all 1s ease;
-webkit-transition: all 1s ease;
-o-transition: all 1s ease;
}
#menu.show {
opacity: 1;
visibility: visible;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<a href="#" title="">Open Menu</a>
<div id="menu">HI, MENU HERE</div>
您的代码中的问题来自条件,您没有使用 else
语句,因此如果您的元素具有 class hidemenu``and the class will be changed two times, the first condition will add the class
showmenu[=14,则这两个条件都会触发=]else` 你的逻辑:
function showmenu() {
if($('#sidebar-menu').hasClass('hidemenu')){
$('#sidebar-menu').removeClass('hidemenu');
$('#sidebar-menu').addClass('showmenu');
} else if($('#sidebar-menu').hasClass('showmenu')){
$('#sidebar-menu').removeClass('showmenu');
$('#sidebar-menu').addClass('hidemenu');
} // end if has class
} // end function
注意 : 有效的方法是使用 toggleClass()
:
$('a').click( function(e) {
e.preventDefault(); //Prevent the default action
$('#sidebar-menu').toggleClass('hidemenu showmenu');
});
希望这对您有所帮助。
您的逻辑存在问题是因为您有两个单独的 if
语句。第一个添加 showmenu
class 如果它不在元素上。第二个然后检测到您刚刚添加的 class 现在在元素上并再次将其删除。最终结果是什么都没有发生。
要解决此问题,请将逻辑加入到单个 if/else
语句中,或者更好的是,使用 toggleClass()
,如下所示:
$('a').click(function(e) {
e.preventDefault();
$('#sidebar-menu').toggleClass('hidemenu showmenu');
});
.hidemenu {
opacity: 0;
transition: opacity 1s ease;
-moz-transition: opacity 1s ease;
-ms-transition: opacity 1s ease;
-webkit-transition: opacity 1s ease;
-o-transition: opacity 1s ease;
}
.showmenu {
opacity: 1;
transition: opacity 1s ease;
-moz-transition: opacity 1s ease;
-ms-transition: opacity 1s ease;
-webkit-transition: opacity 1s ease;
-o-transition: opacity 1s ease;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<a href="#" title="">Open Menu</a>
<div id="sidebar-menu" class="hidemenu">
Menu goes here...
</div>
注意使用不显眼的事件处理程序,并且仅指定 opacity
CSS 属性 进行动画处理而不是提供 all
.
使用 toggleClass
$('button').mouseover(function() {
$('#menu').toggleClass('hide');
});
.hide {
display:none
}
<button>mouse over</button>
<div class='hide' id='menu'>Menu</div>
<script
src="https://code.jquery.com/jquery-3.1.1.min.js"
integrity="sha256-hVVnYaiADRTO2PzUGmuLJr8BLUSjGIZsDYGmIJLv2b8="
crossorigin="anonymous"></script>