JSFiddle此問題。getElementsByClassName顯示正確的長度,但不對第三個(最後一個)結果執行代碼
我有一個函數,當您更改下拉列表的值時執行。它選擇所有具有與select選項的值相對應的類名稱的元素。 (即「Ralph」選擇所有具有類別名稱「Ralph」的div元素)。
從那裏,我已經試圖遍歷類數組的東西(我不太好,編程詞彙)。我認爲它運作良好。然後我意識到,它會不是隱藏第三個「丹」元素。
從select下拉菜單中選擇另一個值後,它會隱藏它,然後再次選擇「Dan」。
控制檯中沒有錯誤,我可以看到。我試過以下內容:
將+1添加到IF語句的x.length中,試圖強制它再次執行它。
設置i = -1(愚蠢,我知道。擾流板,它沒有工作)。
在控制檯中,您會注意到我記錄了var x(包含類名稱)的初始長度。它正確地確定有3個「丹」元素。我很困惑,爲什麼它沒有隱藏最後一個。
JS:
var x;
function filterName(n) {
x = document.getElementsByClassName(n);
console.log(x.length);
for (i = 0; i < x.length; i++) {
x[i].setAttribute("class", "hidden");
}
}
HTML:
<div class="container">
<div class="names col-sm-12">
<form name="filterDB" action="POST">
<select id="filterName" name="filterName">
<option value="" disabled="" selected="">Filter by Employee: </option>
<option id="Ralph" name="name" value="Ralph">Ralph</option>
<option id="Dan" name="name" value="Dan">Dan</option>
<option id="Brady" name="name" value="Brady">Brady</option>
<option id="Abby" name="name" value="Abby">Abby</option>
</select>
</form>
</div>
<div class="col-md-2 col-md-offset-1">
<h4 class="titles">Monday</h4>
<hr>
<div class="Ralph">Name: Ralph<hr></div>
</div>
<div class="col-md-2">
<h4 class="titles">Tuesday</h4>
<hr>
<div class="Dan">Name: Dan<hr></div>
<div class="Dan">Name: Dan<hr></div>
</div>
<div class="col-md-2">
<h4 class="titles">Wednesday</h4>
<hr>
<div class="Brady">Name: Brady<hr></div>
</div>
<div class="col-md-2">
<h4 class="titles">Thursday</h4>
<hr>
<div class="Abby">Name: Abby<hr></div>
</div>
<div class="col-md-2">
<h4 class="titles">Friday</h4>
<hr>
<div class="Dan">Name: Dan<hr></div>
</div>
<div class="clearfix"></div>
</div>
'getElementsByClassName'返回[實時的HTMLCollection](https://developer.mozilla.org/en/docs/Web/API/ HTMLCollection),這意味着它將隨着您更改DOM而發生變化。 – freefaller
是的!謝謝。所以我應該把類名「數組」放入一個真正的數組中,然後遍歷它? – perkface
這是有道理的,是的 – freefaller