【发布时间】:2014-10-16 07:38:13
【问题描述】:
我对 jQuery 选择器很生气。
我正在使用您可以在此处找到的现成脚本(可以在 jQuery、CSS 和 HTML 上进行实时编辑,非常棒):
http://codepen.io/robooneus/pen/ivdFH
它在输入输入文本时过滤 li 元素。例如,当我输入“Ap”时,它会隐藏所有不包含“Ap”的 li 元素。例如,在 li 下方,“Apple pie”保持可见,而“Pumpkin pie”则不可见。
<ul id="list">
<li class="in">Apple pie</li>
<li class="in">Pumpkin pie</li>
<ul>
它可以工作,但问题是在 li 里面我需要放很多其他的东西,就像你在这个例子中看到的那样:
<ul id="list">
<li class="in">Apple pie <strong>abc</srong> Hello</li>
<li class="in">Pumpkin pie <strong>123</srong> Bye</li>
<ul>
我不希望脚本也搜索“abc”、“123”、“Hello”和“Bye”,所以我想使用属性作为一种索引:
<ul id="list">
<li class="in" for="Appe pie">Apple pie <strong>abc</srong> Hello</li>
<li class="in" for="Pumpkin pie">Pumpkin pie <strong>123</srong> Bye</li>
<ul>
在 [for] 属性中,我只输入了我想要在输入时执行实时搜索的单词,但我无法编辑脚本。这是原始代码:
$(document).ready(function() {
var jobCount = $('#list .in').length;
$('.list-count').text(jobCount + ' items');
$("#search-text").keyup(function () {
//$(this).addClass('hidden');
var searchTerm = $("#search-text").val();
var listItem = $('#list').children('li');
var searchSplit = searchTerm.replace(/ /g, "'):containsi('")
$.extend($.expr[':'], {
'containsi': function(elem, i, match, array)
{
return (elem.textContent || elem.innerText || '').toLowerCase()
.indexOf((match[3] || "").toLowerCase()) >= 0;
}
});
$("#list li").not(":containsi('" + searchSplit + "')").each(function(e) {
$(this).addClass('hiding out').removeClass('in');
setTimeout(function() {
$('.out').addClass('hidden');
}, 300);
});
$("#list li:containsi('" + searchSplit + "')").each(function(e) {
$(this).removeClass('hidden out').addClass('in');
setTimeout(function() {
$('.in').removeClass('hiding');
}, 1);
});
var jobCount = $('#list .in').length;
$('.list-count').text(jobCount + ' items');
//shows empty state text when no jobs found
if(jobCount == '0') {
$('#list').addClass('empty');
}
else {
$('#list').removeClass('empty');
}
});
});
我尝试了以下语法的所有可能组合,但没有成功:
li[for]
$("#list li").attr("for")
$("#list li[for]")
相信我,我在这上面花了 4 个小时。在某些时候,我设法在 [for] 属性中“指向”了脚本,但是以一种不需要的和错误的方式:
$("#list li[for^="'+searchTerm+'"]")
我还尝试使用 Firebug 控制台调试代码,但仍然没有成功。
【问题讨论】:
-
与其尝试发明新属性,不如尝试使用
data-属性,该属性已经具有built-in support in jQuery。 -
你认真地编写了所有这些代码来实现单一方法可以做到的事情吗?
标签: javascript jquery html css