gpt4 book ai didi

javascript - 用于过滤 li 元素列表的 jQuery 插件

转载 作者:行者123 更新时间:2023-11-30 16:45:56 25 4
gpt4 key购买 nike

这是一个过滤 li 元素的插件。

jquery.livefilter.js:

/*
* jQuery.liveFilter
*
* Copyright (c) 2009 Mike Merritt
*
* Forked by Lim Chee Aun (cheeaun.com)
*
*/

(function($){
$.fn.liveFilter = function(inputEl, filterEl, options){
var defaults = {
filterChildSelector: null,
filter: function(el, val){
return $(el).text().toUpperCase().indexOf(val.toUpperCase()) >= 0;
},
before: function(){},
after: function(){}
};
var options = $.extend(defaults, options);

var el = $(this).find(filterEl);
if (options.filterChildSelector) el = el.find(options.filterChildSelector);

var filter = options.filter;
$(inputEl).keyup(function(){
var val = $(this).val();
var contains = el.filter(function(){
return filter(this, val);
});
var containsNot = el.not(contains);
if (options.filterChildSelector){
contains = contains.parents(filterEl);
containsNot = containsNot.parents(filterEl).hide();
}

options.before.call(this, contains, containsNot);

contains.show();
containsNot.hide();

if (val === '') {
contains.show();
containsNot.show();
}

options.after.call(this, contains, containsNot);
});
}
})(jQuery);

HTML:

<!DOCTYPE html>
<meta charset="utf-8">
<script src="jquery.min.js"></script>
<script src="jquery.livefilter.js"></script>
<script>
$(function(){
$('#livefilter-list').liveFilter('#livefilter-input', 'li', {
filterChildSelector: 'a'
});
});
</script>

<div>
<fieldset>
<legend><label for="livefilter-input">Search...</label></legend>
<input id="livefilter-input" type="text" value="">
<ul id="livefilter-list">
<li><a href="#">cool</a></li>
<li><a href="#">nice</a></li>
<li><a href="#">interesting</a></li>
<li><a href="#">javascript</a></li>
<li><a href="#">css</a></li>
<li><a href="#">html</a></li>
<li><a href="#">script</a></li>
<li><a href="#">international</a></li>
</ul>
</fieldset>
</div>

这段代码效果很好,但只适用于静态 li 元素,比如上面的 li 标签。我有一个 jQuery 函数,它附加到 ul 标记许多 li 元素。但是,在这种情况下,不起作用

我的代码:

<div id="users" class="nav nav-second-level">
<ul id="livefilter-list" aria-expanded="true">
<li><a>Ciao</a></li>
<li><a>Come</a></li>
<li><a>Stai</a></li>
</ul>
</div>

jQuery:

for (var i in arr) {
$('#users').append('<li data-user="' + arr[i].id + '"><a href="#" style="color: black">' + arr[i].name + '</a></li>');
}

我该如何解决?

更新:

<ul id="livefilter-list" class="nav nav-second-level" aria-expanded="true">
<li><a>Hey</a></li>
<li><a>How are</a></li>
<li><a>you?</a></li>
</ul>

我附加其他 li 元素:

 for (var i in arr) {
$('#livefilter-list').append('<li data-user="' + arr[i].id + '"><a href="#" style="color: black">' + arr[i].name + '</a></li>');
}

然后:

$(function () {
$('#livefilter-list').liveFilter('#livefilter-input', 'li', {
filterChildSelector: 'a'
});
});

用“嘿”、“怎么样”和“你?”作品。但是用 jQuery 添加的 li 元素不行。为什么?

最佳答案

这个语法:

$(function (){...}); 

使传入参数的匿名函数在加载 dom 后立即执行。这意味着:

function () {
$('#livefilter-list').liveFilter('#livefilter-input', 'li', {
filterChildSelector: 'a'
}

在 for 循环追加元素到 livefilter-list 之前运行:

for (var i in arr) {
$('#livefilter-list').append('<li data-user="' + arr[i].id + '"><a href="#" style="color: black">' + arr[i].name + '</a></li>');
}

我建议您在将元素附加到 livefilter-list 后尝试调用 liveFilter :

for (var i in arr) {
$('#livefilter-list').append('<li data-user="' + arr[i].id + '"><a href="#" style="color: black">' + arr[i].name + '</a></li>');
}
$('#livefilter-list').liveFilter('#livefilter-input', 'li', {
filterChildSelector: 'a'
});

关于javascript - 用于过滤 li 元素列表的 jQuery 插件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31249063/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com