Reputation: 35
Here's the original code: (case-sensitive)
function searchValue() {
let srchString = ''
var searchField = $('#search').val().trim();
let srchVal = data.filter(val => val.name.includes(searchField))
srchVal.forEach((item) => {
srchString += `<a class="list-item" href="${item.url}">${item.name}</a>`
})
$('#resultDiv').empty().append(srchString)
}
let data = [
{
"name": "Senior Officer Trade Back Office",
"url": "https://www.blockworks.com/senior-officer-trade-back-office-1061445-jv/?source=searchResults&searchType=1&placement=1&sortBy=date"
},
{
"name": "Junior Officer Trade Back Office",
"url": "https://www.blockworks.com/junior-officer-trade-back-office-1061443-jv/?source=searchResults&searchType=1&placement=2&sortBy=date"
},
{
"name": "Machine Learning",
"url": "https://www.blockworks.com/5-machine-learning-1061442-jv/?source=searchResults&searchType=1&placement=3&sortBy=date"
}
]
I tried toLowercase()
to make it case-insensitive, here's the code:
function searchValue() {
let srchString = ''
var searchField = $('#search').val().trim();
var searchFieldLower = searchField.toLowerCase();
var shouldToggle = $('#search').text().toLowerCase().indexOf(searchFieldLower) >= 0;
$('#search').toggle(shouldToggle);
let srchVal = data.filter(val => val.name.includes(searchFieldLower))
srchVal.forEach((item) => {
srchString += `<a class="list-item" href="${item.url}">${item.name}</a>`
})
$('#resultDiv').empty().append(srchString)
}
let data = [
{
"name": "Senior Officer Trade Back Office",
"url": "https://www.blockworks.com/senior-officer-trade-back-office-1061445-jv/?source=searchResults&searchType=1&placement=1&sortBy=date"
},
{
"name": "Junior Officer Trade Back Office",
"url": "https://www.blockworks.com/junior-officer-trade-back-office-1061443-jv/?source=searchResults&searchType=1&placement=2&sortBy=date"
},
{
"name": "Machine Learning",
"url": "https://www.blockworks.com/5-machine-learning-1061442-jv/?source=searchResults&searchType=1&placement=3&sortBy=date"
}
]
Im not sure if I'm using toLowerCase()
right, can any one show me where I had messed up or how to do it?
Also, what are some other approachs to this?
Upvotes: 0
Views: 72
Reputation: 22500
Try this.Set lowecase
to seach result and matched value
function searchValue() {
let srchString = ''
var searchField = $('#search').val().trim();
if(searchField){
let srchVal = data.filter(val => val.name.toLowerCase().indexOf(searchField.toLowerCase())>-1)
srchVal.forEach((item) => {
srchString += `<a class="list-item" href="${item.url}">${item.name}</a>`
})
}
$('#resultDiv').empty().append(srchString)
}
working fiddle
function searchValue() {
let srchString = ''
var searchField = $('#search').val().trim();
if(searchField){
let srchVal = data.filter(val => val.name.toLowerCase().indexOf(searchField.toLowerCase())>-1)
srchVal.forEach((item) => {
srchString += `<a class="list-item" href="${item.url}">${item.name}</a>`
})
}
$('#resultDiv').empty().append(srchString)
}
let data = [
{
"name": "Senior Officer Trade Back Office",
"url": "https://www.blockworks.com/senior-officer-trade-back-office-1061445-jv/?source=searchResults&searchType=1&placement=1&sortBy=date"
},
{
"name": "Junior Officer Trade Back Office",
"url": "https://www.blockworks.com/junior-officer-trade-back-office-1061443-jv/?source=searchResults&searchType=1&placement=2&sortBy=date"
},
{
"name": "Machine Learning",
"url": "https://www.blockworks.com/5-machine-learning-1061442-jv/?source=searchResults&searchType=1&placement=3&sortBy=date"
}
]
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<input type="text" id="search" onkeyup="searchValue()">
<p id="resultDiv"></p>
Upvotes: 1
Reputation: 14541
Correct this
let srchVal = data.filter(val => val.name.includes(searchFieldLower))
to this:
let srchVal = data.filter(val => val.name.toLowerCase().includes(searchFieldLower))
That way every time a name is compared, it would be converted to lowercase before being compared.
Upvotes: 1