在打开一个时关闭其他特定 类
Toggle other specific classes off when toggling one on
我有一组 div
个元素,它们不是彼此的子元素,每个元素都有单独的背景图像,因此使用单独的 class 名称。
点击其中一个时,我希望它通过交换背景图像来突出显示。如果另一个 div
被突出显示,我想通过交换其背景图像来取消突出显示。如果单击相同的突出显示 div
,我想取消突出显示它。
我目前的方法是通过 toggleClass
完成此操作,我设法交换了我点击的 div
的 class,但没有交换其他的返回。
我之前用 div
元素管理过这个,这些元素都通过使用 .not
功能交换到相同的 class,但我很难用 div
个元素使用单独的、特定的 classes.
此处为 JSFiddle 版本:https://jsfiddle.net/el_simmo/8cnu776j/3/
$(document).ready(function(){
var theboxes = $("#svg1 #svg2 #svg3");
var clickclasses = $("svg1classclick svg2classclick svg3classclick");
$("[id^='svg']").on("click", function(){
var thissvg = $(this);
var svgclick = $(this).attr("id") + "classclick";
thissvg.toggleClass(svgclick);
theboxes.not(thissvg).removeClass(clickclasses);
});
});
您应该在元素之间使用公共 class。在本例中,我对突出显示的元素使用 class .clicked
,对所有元素使用 .svg-wrapper
。这样做,您可以轻松 select 元素以及 add/remove 来自元素的 class。
$('.svg-wrapper').on('click', function () {
$(this).toggleClass('clicked');
$('.svg-wrapper').not(this).removeClass('clicked');
});
然后您可以更新 CSS 来为点击的变体设置样式:
#svg1 {
/* Initial background */
}
#svg1.clicked {
/* Clicked background */
}
您可以通过使用常见的 classes 极大地改进您的逻辑并使您的代码变干。首先,将通用的 class 应用于您希望可点击的所有 div
元素,在我的示例中,我使用 svgContainer
:
<div>
<div id="svg1" class="svgContainer"></div>
</div>
<div>
<div id="svg2" class="svgContainer"></div>
</div>
<div>
<div id="svg3" class="svgContainer"></div>
</div>
从那里您可以使用以下更简单的逻辑通过单个 highlight
class:
打开和关闭突出显示
$(".svgContainer").on("click", function () {
$(this).toggleClass('highlight');
$('.svgContainer').not(this).removeClass('highlight');
});
.svgContainer {
height: 60px;
background-repeat: no-repeat;
}
#svg1 {
background-image: url("http://fdslive.oup.com/www.oup.com/elt/general_content/global/measuring_impact/images/svgs/teacher.svg");
}
#svg1.highlight {
background-image: url("http://fdslive.oup.com/www.oup.com/elt/general_content/global/measuring_impact/images/svgs/teacher-purple.svg");
}
#svg2 {
background-image: url("http://fdslive.oup.com/www.oup.com/elt/general_content/global/measuring_impact/images/svgs/student.svg");
}
#svg2.highlight {
background-image: url("http://fdslive.oup.com/www.oup.com/elt/general_content/global/measuring_impact/images/svgs/student-purple.svg");
}
#svg3 {
background-image: url("http://fdslive.oup.com/www.oup.com/elt/general_content/global/measuring_impact/images/svgs/support.svg");
}
#svg3.highlight {
background-image: url("http://fdslive.oup.com/www.oup.com/elt/general_content/global/measuring_impact/images/svgs/support-purple.svg");
}
注意在 CSS 中使用复合 class 选择器意味着你只需要切换一个 class,这使得 JS 代码简单很多。
我有一组 div
个元素,它们不是彼此的子元素,每个元素都有单独的背景图像,因此使用单独的 class 名称。
点击其中一个时,我希望它通过交换背景图像来突出显示。如果另一个 div
被突出显示,我想通过交换其背景图像来取消突出显示。如果单击相同的突出显示 div
,我想取消突出显示它。
我目前的方法是通过 toggleClass
完成此操作,我设法交换了我点击的 div
的 class,但没有交换其他的返回。
我之前用 div
元素管理过这个,这些元素都通过使用 .not
功能交换到相同的 class,但我很难用 div
个元素使用单独的、特定的 classes.
此处为 JSFiddle 版本:https://jsfiddle.net/el_simmo/8cnu776j/3/
$(document).ready(function(){
var theboxes = $("#svg1 #svg2 #svg3");
var clickclasses = $("svg1classclick svg2classclick svg3classclick");
$("[id^='svg']").on("click", function(){
var thissvg = $(this);
var svgclick = $(this).attr("id") + "classclick";
thissvg.toggleClass(svgclick);
theboxes.not(thissvg).removeClass(clickclasses);
});
});
您应该在元素之间使用公共 class。在本例中,我对突出显示的元素使用 class .clicked
,对所有元素使用 .svg-wrapper
。这样做,您可以轻松 select 元素以及 add/remove 来自元素的 class。
$('.svg-wrapper').on('click', function () {
$(this).toggleClass('clicked');
$('.svg-wrapper').not(this).removeClass('clicked');
});
然后您可以更新 CSS 来为点击的变体设置样式:
#svg1 {
/* Initial background */
}
#svg1.clicked {
/* Clicked background */
}
您可以通过使用常见的 classes 极大地改进您的逻辑并使您的代码变干。首先,将通用的 class 应用于您希望可点击的所有 div
元素,在我的示例中,我使用 svgContainer
:
<div>
<div id="svg1" class="svgContainer"></div>
</div>
<div>
<div id="svg2" class="svgContainer"></div>
</div>
<div>
<div id="svg3" class="svgContainer"></div>
</div>
从那里您可以使用以下更简单的逻辑通过单个 highlight
class:
$(".svgContainer").on("click", function () {
$(this).toggleClass('highlight');
$('.svgContainer').not(this).removeClass('highlight');
});
.svgContainer {
height: 60px;
background-repeat: no-repeat;
}
#svg1 {
background-image: url("http://fdslive.oup.com/www.oup.com/elt/general_content/global/measuring_impact/images/svgs/teacher.svg");
}
#svg1.highlight {
background-image: url("http://fdslive.oup.com/www.oup.com/elt/general_content/global/measuring_impact/images/svgs/teacher-purple.svg");
}
#svg2 {
background-image: url("http://fdslive.oup.com/www.oup.com/elt/general_content/global/measuring_impact/images/svgs/student.svg");
}
#svg2.highlight {
background-image: url("http://fdslive.oup.com/www.oup.com/elt/general_content/global/measuring_impact/images/svgs/student-purple.svg");
}
#svg3 {
background-image: url("http://fdslive.oup.com/www.oup.com/elt/general_content/global/measuring_impact/images/svgs/support.svg");
}
#svg3.highlight {
background-image: url("http://fdslive.oup.com/www.oup.com/elt/general_content/global/measuring_impact/images/svgs/support-purple.svg");
}
注意在 CSS 中使用复合 class 选择器意味着你只需要切换一个 class,这使得 JS 代码简单很多。