0

我试图隐藏所有<li>元素,然后只显示那些<li>包含<p>与输入/搜索字段的值匹配的文本的子元素。

HTML:

<input id="search" type="text" placeholder="Search">

<ul class="items">

    <li class="item">
        <p class="keywords" style="display: none;">skins, hair</p>//keywords
        <a class="thumb" href="#"><img src="koalahat.jpg"></a>
    </li>

    <li class="item">
        <p class="keywords" style="display: none;">hair</p>
        <a class="thumb" href="#"><img src="goosehat.jpg"></a>
    </li>

</ul>


JS:

$('#search').keyup(function(){
    var typed = $(this).val(); //get the input field value
    $('.items li').hide() //hide all LIs...
    $('.items li').filter(function(){ //filter all LIs that...
        $('.items li p.keywords:contains(typed)').parent().show(); //... that contain the typed keywords, and show them.
    });
    console.log(typed);
})

我不知道为什么更改$('.items li p.keywords:contains(typed)')$('.items li p.keywords:contains("skins")')返回所需的输出,前者没有。

4

1 回答 1

0

字符串连接问题。尝试这个:

$('p.keywords:contains("' + typed + '")', this).parent().show(); 

我想你需要的是:

$('#search').keyup(function () {
    var typed = this.value; //get the input field value
    $('.items li').hide() //hide all LIs...
    $('.items li').find('p.keywords:contains("' + typed + '")', this).parent().show();
    console.log(typed);
})

小提琴

虽然问题是在选择器$('.items li p.keywords:contains(typed)')中键入的内容被视为字符串而不是变量,因此不会评估其值。相反,您应该将变量与字符串连接起来。而且你也可以取消过滤器,只需选择器就足够了。

于 2013-06-27T18:39:37.257 回答