单击元素时添加一个类,在其他地方单击时将其删除
Add a class when clicked on element, remove it when clicked elsewhere
我需要在单击元素时向元素添加一个类( .highlight
),并且在单击元素或文档中其他任何地方时应将其删除。
我已经设法在使用 classList.toggle()
方法单击元素时添加和删除类,但不知道如何在文档中单击时删除类。
这是我的HTML,CSS和JS。
<p class="normal" onclick="detectClick(this)">This is paragraph 1</p>
<p class="normal" onclick="detectClick(this)">This is paragraph 2</p>
<p class="normal" onclick="detectClick(this)">This is paragraph 3</p>
.highlight {
background-color: yellow;
}
function detectClick(element) {
element.classList.toggle("highlight");
}
在这里,您可以看到代码的实际操作,http://codepen.io/vbcda/pen/GodZmr
如果您首先通过单击正文中的任意位置来使用 mousedown 事件从元素中删除退出类"突出显示",则可能会发生这种情况。
<body onmousedown="outerClick(this)"> // Add this in your html file
function detectClick(element) {
element.classList.toggle("highlight");
}
function outerClick(el){
var elements = document.querySelectorAll(".highlight");
for (var i = 0; i < elements.length; i++) {
elements[i].classList.remove('highlight');
}
}
我会做这样的事情。
function detectClick(element) {
var elements = document.getElementsByClassName("normal");
Array.from(elements).forEach(function(element) {
element.setAttribute("class", "normal");
});
element.setAttribute("class", "normal highlight");
}
您也可以明确并使用document.getElementsByClassName("正常突出显示")。
一个简单的轻量级解决方案
这可以通过几行CSS来完成。在这种情况下,诀窍是您必须将 tabindex 属性添加到每个 P,以便它可以接收焦点。
运行下面的代码段,然后单击文本进行尝试。
p:not(:focus) { background-color: lightgray;}
p:focus { background-color: yellow;}
<p tabindex=1>This is paragraph 1</p>
<p tabindex=2>This is paragraph 2</p>
<p tabindex=3>This is paragraph 3</p>
如果你想使用jquery:
$('.normal').click(function(e){
e.stopPropagation();
$(this).toggleClass('highlight');
});
$(document).click(function(){
$('.normal').removeClass('highlight');
});
相关文章:
- 通过单击表单中的按钮,在代码生成中使用javascript生成字母数字代码
- 单击表单中的按钮会导致页面刷新
- Ng点击记住单选按钮选择
- 如何在Firefox中禁用视频的单击和双击控件
- 单击或点击切换HTML文本
- 单击表单的“提交”按钮时,获取表单中的所有INPUT和ACTION标记
- 单击表单1中的按钮:更改表单2中隐藏输入的值(纯javascript)
- 单选按钮单击可刷新/更改网站的小区域
- 如何在单击和单击不同的按钮时更改按钮的样式,它应该更改为默认值
- 按钮单击服务器单击
- 触发单选按钮单击,并在页面刷新时记住选择
- 单击表单中的功能
- 显示带有表单提交的单击事件的 toastR
- “表单操作”和“点击时提交表单”都将执行
- 未在 jquery 中通过手动鼠标单击注册单击
- 当单选按钮的标签可单击时双击
- 单击切换单选按钮和标签元素
- 在表格中单击表单外的操作
- 错误:'这'对象不正确;在JQuery中单击事件-单击时的意外行为
- 豁免表单的可点击行为