I have few div
elements with different text content and one input
tag.
<input id="search" type="text"/>
<div class="list>
<div id="el"> red </div>
<div id="el"> blue </div>
<div id="el"> red green </div>
</div>
I'd like to get something like this:
if div
's textContent
is equal to input.value
this div
is displayed. Else, it's hidden.
Example:
input.value = "red"
/* "red" and "red green" are displayed, "blue" is hidden */
My JS code:
var search = document.getElementById("search");
var el = document.getElementById("el");
search.addEventListener("keyup", function(){
if(search.value == el.textContent){
el.style.display = "block"}
else{
el.style.display = "none"}})
<input id="search" type="text"/>
<div class="list">
<div id="el"> red </div>
<div id="el"> blue </div>
<div id="el"> red green </div>
</div>
I have few div
elements with different text content and one input
tag.
<input id="search" type="text"/>
<div class="list>
<div id="el"> red </div>
<div id="el"> blue </div>
<div id="el"> red green </div>
</div>
I'd like to get something like this:
if div
's textContent
is equal to input.value
this div
is displayed. Else, it's hidden.
Example:
input.value = "red"
/* "red" and "red green" are displayed, "blue" is hidden */
My JS code:
var search = document.getElementById("search");
var el = document.getElementById("el");
search.addEventListener("keyup", function(){
if(search.value == el.textContent){
el.style.display = "block"}
else{
el.style.display = "none"}})
<input id="search" type="text"/>
<div class="list">
<div id="el"> red </div>
<div id="el"> blue </div>
<div id="el"> red green </div>
</div>
Share
Improve this question
asked Apr 27, 2016 at 18:25
MartinMartin
1433 gold badges6 silver badges13 bronze badges
1
- IDs must be unique – j08691 Commented Apr 27, 2016 at 18:31
1 Answer
Reset to default 7You don't want to assign the same id
to multiple items. Instead use class
.
See below for a working solution:
var search = document.getElementById("search");
var els = document.querySelectorAll(".el");
search.addEventListener("keyup", function() {
Array.prototype.forEach.call(els, function(el) {
if (el.textContent.trim().indexOf(search.value) > -1)
el.style.display = 'block';
else el.style.display = 'none';
});
});
<input id="search" type="text" />
<div class="list">
<div class="el">red</div>
<div class="el">blue</div>
<div class="el">red green</div>
</div>
Here's the solution for regardless of where the input is located, as long as it is space delimited (just in case):
var search = document.getElementById("search");
var els = document.querySelectorAll(".el");
search.addEventListener("keyup", function() {
Array.prototype.forEach.call(els, function(el) {
var values = search.value.split(' ');
var display = true;
for (var i = 0; i < values.length; i++) {
if(el.textContent.trim().indexOf(values[i]) === -1)
display = false;
}
el.style.display = display ? 'block' : 'none';
});
});
<input id="search" type="text" />
<div class="list">
<div class="el">red</div>
<div class="el">blue</div>
<div class="el">red green</div>
</div>
发布者:admin,转转请注明出处:http://www.yc00.com/questions/1744123312a4559502.html
评论列表(0条)