Итак, я пытаюсь объединить Javascript для моего сайта портфолио фотографий. Моя цель - нажать кнопку, обозначенную Show Only Sunsets, и скрыть каждое изображение без класса Sunsets. Код, который я придумал ниже, ALMOST работает, но есть главный недостаток:Ориентация на одну из нескольких классов/только часть класса string - className vs classList
Этот код сохраняет только видимость изображений, таких как «1.jpg» ниже, чей класс точно/только «Sunsets» (или «Sunsets») NSFW "или что-то еще). Но часто мне нужно давать изображения более одного класса, например, чтобы отличать вертикали или изображения, которые попадают в несколько категорий. Поэтому мне нужен код, чтобы сохранить видимость любого изображения, такого как «2.jpg», ниже которого есть «Sunsets» (или что-то еще) в любом месте своего класса.
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">
придираться: не устанавливать события с SetAttribute. Для этого используется addEventListener. – epascarello
Вы пропустили «imageclass» в последней строке filterOff() и почему ваш код обнаружил «фигурный» тег? Я думаю, что это должно быть «img». – margincall
@epascarello Спасибо! Я был знаком только с синтаксисом getElementById.innerHTML, который использовался для статического атрибута, поэтому, когда я обнаружил, что это не работает для атрибута onClick, я в основном угадывал/Googling. Можете ли вы дать мне точный синтаксис? –