我一直在尝试使搜索过滤器正常工作,但无法使其正常工作。我是一个初学者,但尽我所能使其正常工作。任何可以帮助您的人:)
html
import os
import shutil
if len(os.listdir(folder_path)) == 0: # Check is empty..
shutil.rmtree(folder_path) # Delete..
下面的脚本。
<div class="notes_search">
<input type="search" id="search_input" onkeyup="searchFilter()" placeholder="Search...">
</div>
<ul class="notes_list">
</ul>
<p class="notes_empty-msg">Nothing to show.</p>
</section>
</div>
答案 0 :(得分:1)
您的代码有很多问题。
首先,它是getElementById
而不是getElementsById
,但是您可能会发现使用querySelector
和querySelectorAll
更容易使用,因为它们与CSS选择器相匹配(类似于jQuery)。 / p>
第二,您没有ID为search
的元素。
第三,您的HTML不包含列表项,因此它无法搜索任何内容。
这是一个带有注释的工作版本(使用一些您可能不熟悉但可以使代码更简洁的更现代的JS方法)。注意:它使用一个类使这些项目可见或不可见,并在文本内容中进行搜索,而不仅仅是检查它是否位于内容的开头,从而使它更具灵活性。
function searchFilter() {
// You might find `querySelector` easier to use as it
// allows you to correspond elements with CSS selectors
const input = document.querySelector('#search');
const filter = input.value.toUpperCase();
const ul = document.querySelector('ul');
const lis = ul.getElementsByTagName("li");
for (i = 0; i < lis.length; i++) {
const item = lis[i];
const itemContent = item.textContent.toUpperCase();
// `textContent` might be more appropriate here
// You can use the newer string method `includes`
// to see if `filter` appears in the text content
if (filter.length && itemContent.includes(filter)) {
// Here I've used `classList` as the more modern
// method way of adding and removing classes
item.classList.add('visible');
} else {
item.classList.remove('visible');
}
}
}
li { display: none; }
.visible { display: block }
<div class="notes_search">
<input type="search" id="search" onkeyup="searchFilter()" placeholder="Search...">
</div>
<ul class="notes_list">
<li>Bob</li>
<li>Sue</li>
<li>Rita</li>
<li>Rita and Bob</li>
<li>John</li>
</ul>
<p class="notes_empty-msg">Nothing to show.</p>
</div>
进一步阅读
答案 1 :(得分:0)
您在这里有几处错误的地方:
getElementById
,而不是getElementsById(不是复数)input=document.getElementById('search_input');
index.html
<div class="notes_search">
<input type="search" id="search_input" onkeyup="searchFilter()" placeholder="Search...">
</div>
<ul class="notes_list">
<li><a href = "/">hi</a></li>
<li><a href = "/">hi</a></li>
<li><a href = "/">bye</a></li>
</ul>
<p class="notes_empty-msg">Nothing to show.</p>
</section>
</div>
index.js
function searchFilter() {
// Declare variables
var input, filter, ul, li, a, i, text;
input = document.getElementById('search_input');
filter = input.value.toUpperCase();
ul = document.getElementsByClassName('notes_list')[0];
li = ul.getElementsByTagName("li");
for (i = 0; i < li.length; i++) {
a = li[i].getElementsByTagName("a")[0];
text = a.textContent || a.innerText;
if (a.innerHTML.toUpperCase().indexOf(filter)===0) {
li[i].style.display = "";
} else {
li[i].style.display = "none";
}
}
}
我还向您的html中添加了一些 li 和 a 标记项,因为您没有这些标记项,并且无法找到不在其上的标记html。
答案 2 :(得分:0)
我不确定您要实现的目标,但是简单的html数据列表可以解决您的问题:
<input list="your-choices" id="search_input" placeholder="Search...">
<datalist id="your-choices">
<option value="car">
<option value="tree">
<option value="street">
<option value="sky">
<option value="whatever">
</datalist>
答案 3 :(得分:-5)
您可以通过Jquery搜索
var searchRequest = null;
$(function () {
var minlength = 3;
$("#sample_search").keyup(function () {
var that = this,
value = $(this).val();
if (value.length >= minlength ) {
if (searchRequest != null)
searchRequest.abort();
searchRequest = $.ajax({
type: "GET",
url: "sample.php",
data: {
'search_keyword' : value
},
dataType: "text",
success: function(msg){
//we need to check if the value is the same
if (value==$(that).val()) {
//Receiving the result of search here
}
}
});
}
});
});