所以我正在研究一个搜索栏,类似于 http://www.justdelete.me 上的界面。
我在每个项目上都放置了标签,因此我可以搜索相关术语,并且仍然得到相同的结果。所以我基本上在每个列表项中都有一个列表。这是 HTML,所以你知道我的意思:
<ul class="list">
<li>
<h2 class='Item-list'>
Car
</h2>
<ul class="tags" id='car'>
<li class="tag">vehicle</li>
<li class="tag">autombile</li>
</ul>
</li>
<li>
<h2 class='Item-list'>
House
</h2>
<ul class="tags" id='house'>
<li class="tag">house</li>
<li class="tag">domicile</li>
<li class="tag">residence</li>
<li class="tag">house</li>
<li class="tag">home</li>
</ul>
</li>
<li>
<h2 class='Item-list'>
Bag
</h2>
<ul class="tags" id='bag'>
<li class="tag">bag</li>
<li class="tag">bag</li>
<li class="tag">rucksack</li>
<li class="tag">suitcase</li>
</ul>
</li>
我的jquery隐藏和显示项目如下:
//hide and show items
$(".tags:contains('" + searchquery + "')").parentsUntil(this, 'li').removeClass('no-display');
$(".tags:not(:contains('" + searchquery + "'))").parentsUntil(this, 'li').addClass('no-display');
所以直到现在都没有问题。
当我尝试将包含项目标题的 h2 更改为我在搜索框中键入的任何内容时,就会出现问题。
所以说我输入"V"。我希望我的车 h2,更改为车辆,因为它是汽车的标签之一。
我尝试使用以下代码:
"use strict";
$(".tag:contains('" + searchquery + "')").parentsUntil(this, 'li').children().first().replaceWith('<h2 class="Item-list">'+this+' </h2>');
但它不会更改为车辆,而是更改为文本:[对象窗口]
提前非常感谢!
编辑:这是小提琴。 http://jsfiddle.net/6f8F8/2/
this
引用当前对象,您需要在元素中获取text
或html
,因此请尝试使用text():
$(".tag:contains('" + searchquery + "')").parentsUntil(this, 'li').children().first().replaceWith('<h2 class="Item-list">'+ $(this).text() +' </h2>');
或 html():
$(".tag:contains('" + searchquery + "')").parentsUntil(this, 'li').children().first().replaceWith('<h2 class="Item-list">'+ $(this).html() +' </h2>');