我正在嘗試為從 JSON 資料生成的鏈接/div 添加過濾器。
如果資料不是通過 JSON 格式生成的,我已經有一個搜索過濾器可以在這里正常作業。但我確實需要使用 JSON 來加快加載和處理速度。
問題是,這樣做時它無法過濾鏈接。它應該根據<a></a>標簽內的文本過濾 div,包括<span>..
在此示例中,它只能過濾 JSON 中的第一項,但不能過濾其余項。
// Links Filter
var input = document.getElementById("search-filter-cards");
input.addEventListener("input", searchFilterDivsMenu);
function searchFilterDivsMenu(e) {
var filter = e.target.value.toUpperCase();
var list = document.getElementById("links-list");
var divs = list.getElementsByTagName("div");
for (var i = 0; i < divs.length; i ) {
var a = divs[i].getElementsByTagName("a")[0];
if (a) {
if (a.innerHTML.toUpperCase().indexOf(filter) > -1) {
divs[i].style.display = "";
} else {
divs[i].style.display = "none";
}
}
}
}
// JSON Data for each links
const maincards = {
"linksList": [{
'name': 'Java Bookmarks',
'title': 'Java Bookmarks',
'favicon': '../assets/links-favicons/java-bookmarks.png',
'url': '#',
'tags': 'Login, Logout, Log-in, Log in, Log-out Log out',
'linkattributes': 'rel="noopener noreferrer" target="_blank"'
},
{
'name': 'Chrono',
'title': 'Chrono',
'favicon': '../assets/links-favicons/chrono.ico',
'url': '#',
'tags': 'Login, Logout, Log-in, Log in, Log-out Log out',
'linkattributes': 'rel="noopener noreferrer" target="_blank"'
},
{
'name': 'Kanban (May)',
'title': 'EDEN Kanban',
'favicon': '../assets/links-favicons/kanban.ico',
'url': '#',
'tags': 'Login, Logout, Log-in, Log in, Log-out Log out, Kanban board',
'linkattributes': 'rel="noopener noreferrer" target="_blank"'
},
]
};
const createMainCardLinks = ({
name,
title,
favicon,
url,
tags,
linkattributes
}) => `
<div >
<img src="${favicon}"/>
<a href="${url}" ${linkattributes} title="${title}">${name} <span >${tags}</span></a>
</div>
`;
const links = maincards.linksList.map(createMainCardLinks);
links.forEach(links => {
document.getElementById("load-json-data").innerHTML = links;
});
.h-0 {
display: none;
}
<body>
<input id="search-filter-cards" type="text" autocomplete="off" placeholder="Type here to search">
<div id="links-list">
<div class="link-headers"><a class="mb-0">Sample Links</a></div>
<div id="load-json-data"></div>
</div>
</body>
我是 JS 的初學者,我有一段時間無法解決這個問題。無論如何,提前感謝您的幫助。
uj5u.com熱心網友回復:
讓我永遠注意到你得到了鏈接串列中的所有 div 而不是 load-json-data
這是一個改進的版本。它被簡化了,因為我只在 load-json-data 中切換 div 它可以作業
// Links Filter
var input = document.getElementById("search-filter-cards");
input.addEventListener("input", searchFilterDivsMenu);
function searchFilterDivsMenu(e) {
const filter = e.target.value.toUpperCase();
const cards = document.querySelectorAll("#links-list .card");
cards.forEach(card => {
var a = card.querySelector("a");
// console.log(filter, "|", a.textContent.toUpperCase(), "|", a.textContent.toUpperCase().indexOf(filter))
card.hidden = !a || (filter && a.textContent.toUpperCase().indexOf(filter) === -1);
})
}
// JSON Data for each links
const maincards = {
"linksList": [{
'name': 'Java Bookmarks',
'title': 'Java Bookmarks',
'favicon': '../assets/links-favicons/java-bookmarks.png',
'url': '#',
'tags': 'Login, Logout, Log-in, Log in, Log-out Log out',
'linkattributes': 'rel="noopener noreferrer" target="_blank"'
},
{
'name': 'Chrono',
'title': 'Chrono',
'favicon': '../assets/links-favicons/chrono.ico',
'url': '#',
'tags': 'Login, Logout, Log-in, Log in, Log-out Log out',
'linkattributes': 'rel="noopener noreferrer" target="_blank"'
},
{
'name': 'Kanban (May)',
'title': 'EDEN Kanban',
'favicon': '../assets/links-favicons/kanban.ico',
'url': '#',
'tags': 'Login, Logout, Log-in, Log in, Log-out Log out, Kanban board',
'linkattributes': 'rel="noopener noreferrer" target="_blank"'
},
]
};
const createMainCardLinks = ({
name,
title,
favicon,
url,
tags,
linkattributes
}) => `
<div >
<img src="${favicon}"/>
<a href="${url}" ${linkattributes} title="${title}">${name} <span >${tags}</span></a>
</div>
`;
const links = maincards.linksList.map(createMainCardLinks);
document.getElementById("load-json-data").innerHTML = links.join("")
.h-0 {
display: none;
}
<input id="search-filter-cards" type="text" autocomplete="off" placeholder="Type here to search">
<div id="links-list">
<div class="link-headers"><a class="mb-0">Sample Links</a></div>
<div id="load-json-data"></div>
<div class="card link-container">
<img class="link-img" src="../assets/links-favicons/plus.ico" />
<a class="link-title stretched-link" href="#" rel="noopener noreferrer" target="_blank" title="Plus">Plus <span class="h-0">Quick Links</span></a>
</div>
<div class="card link-container">
<img class="link-img" src="../assets/links-favicons/google.ico" />
<a class="link-title stretched-link" href="#" rel="noopener noreferrer" target="_blank" title="Google">Google <span class="h-0">Quick Links</span></a>
</div>
</div>
uj5u.com熱心網友回復:
我已經使用 jquery 進行附加,您也可以使用 javascript。
const dataJSON = {
"linksList": [{
'name': 'Java Bookmarks',
'title': 'Java Bookmarks',
'favicon': '../assets/links-favicons/java-bookmarks.png',
'url': '#',
'tags': 'Login, Logout, Log-in, Log in, Log-out Log out',
'linkattributes': 'rel="noopener noreferrer" target="_blank"'
},
{
'name': 'Chrono',
'title': 'Chrono',
'favicon': '../assets/links-favicons/chrono.ico',
'url': '#',
'tags': 'Login, Logout, Log-in, Log in, Log-out Log out',
'linkattributes': 'rel="noopener noreferrer" target="_blank"'
},
{
'name': 'Kanban (May)',
'title': 'EDEN Kanban',
'favicon': '../assets/links-favicons/kanban.ico',
'url': '#',
'tags': 'Login, Logout, Log-in, Log in, Log-out Log out, Kanban board',
'linkattributes': 'rel="noopener noreferrer" target="_blank"'
},
]
};
dataJSON.linksList.forEach((element) => {
$('#myDiv').append(`
<div><a href="${element.url}"><img style="margin-right:10px;" src="${element.favicon}"/>${element.name}</a></div>
`);
})
function myFunction() {
var input, filter, parentDiv, childDiv, a, i, txtValue;
input = document.getElementById("myInput");
filter = input.value.toUpperCase();
parentDiv = document.getElementById("myDiv");
childDiv = parentDiv.getElementsByTagName("div");
for (i = 0; i < childDiv.length; i ) {
a = childDiv[i].getElementsByTagName("a")[0];
txtValue = a.textContent || a.innerText;
if (txtValue.toUpperCase().indexOf(filter) > -1) {
childDiv[i].style.display = "";
} else {
childDiv[i].style.display = "none";
}
}
}
* {
box-sizing: border-box;
}
#myInput {
background-position: 10px 12px;
background-repeat: no-repeat;
width: 100%;
font-size: 16px;
padding: 12px 20px 12px 40px;
border: 1px solid #ddd;
margin-bottom: 12px;
}
#myDiv {
list-style-type: none;
padding: 0;
margin: 0;
}
#myDiv div a {
border: 1px solid #ddd;
margin-top: -1px; /* Prevent double borders */
background-color: #f6f6f6;
padding: 12px;
text-decoration: none;
font-size: 18px;
color: black;
display: block
}
#myDiv div a:hover:not(.header) {
background-color: #eee;
}
<script src="https://code.jquery.com/jquery-3.6.0.min.js" integrity="sha256-/xUj 3OJU5yExlq6GSYGSHk7tPXikynS7ogEvDej/m4=" crossorigin="anonymous"></script>
<h2>Links Search</h2>
<input type="text" id="myInput" onkeyup="myFunction()" placeholder="Search for names.." title="Type in a name">
<div id="myDiv">
</div>
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/472741.html
標籤:javascript html jQuery css
下一篇:Jquery找不到鏈接
