javascript - 定位多个类之一/仅类字符串的一部分 - className 与 classList

标签 javascript toggle getelementsbytagname classname getelementsbyclassname

所以我正在尝试为我的摄影作品集网站制作一个 Javascript 切换器。我的目标是能够单击标记为“仅显示日落”的按钮并隐藏每个没有“日落”类的图像。我在下面提出的代码几乎可以工作,但有一个重大缺陷:

此代码仅保留以下图像的可见性,例如“1.jpg”,其类恰好/仅是“Sunsets”(或“NSFW”或其他)。但通常我需要为图像提供多个类别,例如区分垂直方向或属于多个类别的图像。因此,我需要代码来保留任何图像的可见性,例如“2.jpg”,其下方的类中的任何位置都有“日落”(或其他内容)。

JS:

<script>
        function filterOn(imageClass) {
            var image = document.getElementsByTagName('figure');
            for (i = 0; i < image.length; i++) {
                if (image[i].className != imageClass) {
                    image[i].style.display = 'none';
                }
            }
            document.getElementById(imageClass + '-off').innerHTML = 'Undo Filter';
            document.getElementById(imageClass + '-off').setAttribute('onClick', "filterOff('" + imageClass + "')");
            document.getElementById(imageClass + '-off').id = imageClass + '-on';
        }
        function filterOff(imageClass) {
            var image = document.getElementsByTagName('figure');
            for (i = 0; i < image.length; i++) {
                if (image[i].className != imageClass) {
                    image[i].style.display = 'inline-block';
                }
            }
            document.getElementById(imageClass + '-on').innerHTML = 'Show Only ' + imageClass;
            document.getElementById(imageClass + '-on').setAttribute('onClick', "filterOn('" + imageClass + "')");
            document.getElementById(imageClass + '-on').id = imageClass + '-off';
        }
    </script>

HTML:

    <ul>
        <li id="Sunsets-off" onClick="filterOn('Sunsets')">Show Only Sunsets</li>
        <li id="NSFW-off" onClick="filterOn('NSFW')">Show Only NSFW</li>
    </ul>
    <img class="Sunsets" src="1.jpg">
    <img class="vertical Sunsets" src="2.jpg">
    <img class="NSFW vertical" src="3.jpg">
    <img class="Architectural" src="4.jpg">
    <img class="Sunsets Landscapes" src="5.jpg">
    <img class="Abstract" src="6.jpg">
    <img class="NSFW LondonAndrews" src="7.jpg">

最佳答案

该测试:

if (image[i].className != imageClass) {

确实会检查整个类字符串。 有classList用于执行您想要的操作的 API,将您的测试替换为:

if (!image[i].classList.contains(imageClass)) {

关于javascript - 定位多个类之一/仅类字符串的一部分 - className 与 classList,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34494544/

相关文章:

javascript - Canvas:动画贝塞尔曲线绘制

javascript - jQuery jPlayer 在 iPad 上不显示持续时间

javascript - 将值推送到 html 并再次从 JS 中获取

javascript - "Div hover"正在工作但无效(尚未)

javascript - 如何使用 getElementsByName 方法在 javascript 中提交表单?

javascript - 如何将视频放入 Canvas ?

单击另一个 li 时的 jQuery slideToggle li

jQuery,检测元素是否已经切换

JavaScript:由 getElementsByTagName() 创建的数组不会返回其元素的长度?

javascript - 使用 getElementsByTagName() 更改所有元素的样式