nic*_*ero 0 html javascript css jquery
我遇到的问题是我觉得我的Javascript效率不高,并且有更好的方法来完成我想要做的事情.为了显示我的问题,我在JSFiddle中创建了一个较小版本的项目.
最终目标是让左侧的块在单击时在大灰色框中显示信息.这是在JSFiddle中实现的!问题是(我认为这是一个问题)是我为每个块都有一个单独的javascript函数.(这是一个小规模的例子,我的项目有70多个"块")
在每个函数中,隐藏所有先前单击的块,并删除它们的"单击"类.(Clicked类基本上是一个告诉函数是否隐藏/显示信息的标志)
这是其中一个功能的例子......这是正确的方法吗?记住,我的项目是70次,所以我每次都会检查并隐藏每个信息块.
$('.block1').on('click', function (e) {
if ($(this).hasClass('block1-clicked')) {
$('.block1-info').fadeOut();
}
else {
$('.block2-info').fadeOut();
$('.block2').removeClass('block2-clicked');
$('.block3-info').fadeOut();
$('.block3').removeClass('block3-clicked');
$('.block4-info').fadeOut();
$('.block4').removeClass('block4-clicked');
$('.block1-info').fadeIn();
}
$(this).toggleClass('block1-clicked') ;
});
Run Code Online (Sandbox Code Playgroud)
谢谢!!
有几种方法可以实现这一目标.如果使用以下模式,则可以使用单击的单位的ID来设置相关DIV的状态.通过使用两个类,您可以使用一个清除所有项目,另一个用于设置单个项目
<div id="block1" class="block">Block 1</div>
. . .
<div class="info"></div>
<div class="blockinfo block1">Info about Block 1</div>
... etc
Run Code Online (Sandbox Code Playgroud)
JS:
$('.block').on('click', function() {
var myId = $(this).attr('id');
$('.block').removeClass('clicked');
$(this).addClass('clicked');
$('.blockinfo').fadeout();
$('.' + myId).fadeIn();
})
Run Code Online (Sandbox Code Playgroud)