如何使用CSS / JavaScript取消选择突出显示的列表项?

时间:2018-12-12 17:44:24

标签: javascript html css

我有一个图像列表以及一个关键字,它表示用户可以单击的选择列表,以基于选择限制其他列表的选择。当用户从其他列表中进行选择时,图像会继续通过CSS阴影突出显示。但是,由于其他一些交互作用,我想稍后停用该突出显示的图像,即取消选择该图像的阴影。

那将如何工作?尚未找到合适,简单的解决方案。例如,一些“ document.getElementById('li1')。Selected = false”,这意味着我需要为每个元素添加一个ID。

    .explore {
        margin-left: auto;
        margin-right: auto;
        width: 1020px;
        margin-top: 20px;
    }
    
    .explore_body {
      width: 100%;
      /* border: 1px solid #f00; */
      padding-bottom: 5px;
      padding-top: 5px;
      clear: both;
      background: #f0f0f0;
      *background: #f0f0f0; /* star hack to target IE6 & 7*/
    }
    
    .explore_body ul {
      margin: 5px;
      padding-top: 5px;
      clear: both;
      width: 100%;
    }
    
    .explore_body ul li {
      display: inline-block; /*IE7 doesn't support inline-block */
      zoom: 1;
      *display: inline; /* star hack to target IE6 & 7*/
      /* background: url(images/album.png); */
      width: 130px;
      height: 145px;
      margin: 5px 5px;
    }
    
    .explore_body ul li img {
      width: 120px;
      height: 100px;
      margin: 5px 0px 5px 5px;
    }
    
    .explore_body ul li {
      opacity: 0.9;
      filter:alpha(opacity=90); /* For IE8 and earlier */
    }
    
    .explore_body ul li:hover {
      opacity: 1;
      filter:alpha(opacity=100); /* For IE8 and earlier */
      -webkit-box-shadow: 3px 3px 3px 3px #666;
    }       
            
    .explore_body ul li:selected {
      opacity: 1;
      filter:alpha(opacity=100); /* For IE8 and earlier */
      -webkit-box-shadow: 3px 3px 3px 3px #666;
    }       
            
    .active {
      opacity: 1;
      filter:alpha(opacity=100); /* For IE8 and earlier */
      -webkit-box-shadow: 3px 3px 3px 3px #666;
    }       
    .active2 {
      background-color: #cedff8;
    }       
    <div class="explore" id="explore">
        <div class="explore_body">
            <h4 style="text-align: center; margin-bottom: -10px; ">explore by theme:</h4>
            <ul id="nav">
                <li><a href="#!" onclick="xxx"><img src="images/air_pollution.png" /></a><a href="#!" class="album_title">Air pollution and air quality</a></li>
                <li><a href="#!" onclick="xxx"><img src="images/biodiversity.png"/></a><a href="#!" class="album_title">Biodiversity</a></li>
                <li><a href="#!" onclick="xxx"><img src="images/chemicals_and_wastes.png"/></a><a href="#!" class="album_title">Chemicals and waste</a></li>
            </ul>
        </div>      
    </div>

感谢任何提示!

2 个答案:

答案 0 :(得分:0)

您需要创建定义所选项目样式的类,将其命名为.active。例如,如果您想仅将阴影添加到所选项目,则应在.active中对其进行定义。然后在js点击事件中,首先从所有项目中删除该类,然后仅将其添加到选定的项目中。

每次选择项目时,您都会从上一个项目中删除.active并将其仅添加到新选择的项目中。

答案 1 :(得分:0)

从代码中删除onclick =“ xxx”,然后在每个“ li”上添加onclick =“ selectMe(this)”,如下所示:

<div class="explore" id="explore">
  <div class="explore_body">
    <h4 style="text-align: center; margin-bottom: -10px; ">explore by theme:</h4>
    <ul id="nav">
      <li onclick="selectMe(this)"><a href="#!"><img src="images/air_pollution.png" /></a><a href="#!" class="album_title">Air pollution and air quality</a></li>
      <li onclick="selectMe(this)"><a href="#!"><img src="images/biodiversity.png"/></a><a href="#!" class="album_title">Biodiversity</a></li>
      <li onclick="selectMe(this)"><a href="#!"><img src="images/chemicals_and_wastes.png"/></a><a href="#!" class="album_title">Chemicals and waste</a></li>
    </ul>
  </div>
</div>

然后在您的JavaScript中添加selectMe()方法,该方法首先取消选择ID为“ nav”的UL中的所有“ LI”元素,然后选择一个被单击的LI:

function selectMe(el) {
  var lis = document.getElementById("nav").getElementsByTagName("li");
  for (i = 0; i < lis.length; i++) {
    lis[i].classList.remove('active')
  }
  el.classList.add('active');
}

Here is a working example