我使用Twittertypeahead.js搜索名单的名字和客户端希望根据名字的建议。
有没有一个选项可以让Twittertypeahead.js搜索查询与每个结果的开头相匹配,而不是字符串中的任何位置?
我可以在\u updateHint
函数中看到一个beginsWithQuery
变量,但是我不知道如何将其指定为一个选项,甚至不知道这是否与我试图实现的目标有关。
在我的项目中调用typeahead的jQuery函数是:
$( 'input[name="s"]' )
.typeahead( {
name: 'search',
remote: wp_typeahead.ajaxurl + '?action=ajax_search&fn=get_ajax_search&terms=%QUERY',
template: [
'<p><a href="{{url}}">{{value}}</a></p>',
].join(''),
engine: Hogan
} )
);
我可以看到来自ajax_search
的响应格式
[
{ "tokens" : [ "First","Last" ],
"url" : "http://url/for/first-last/",
"value" : "First Last" },
]
所以我需要弄清楚如何过滤这个JSON,以便只包含与搜索查询匹配的令牌[0]
的数据。
编辑:根据下面@jharding的anwser,关于我必须添加哪些内容来实施预回迁
解决方案工作的附加说明。
这是一个WordPress网站,该网站正在搜索的名称是自定义帖子类型“模型”的标题。我创建了一个名为list-all-models.php的文件,它以所需的数据格式输出html" target="_blank">模型名称的数组。
<?php
define('WP_USE_THEMES', false);
require('../../../../wp-load.php'); // depends on where this file is
$args = array (
'post_type' => 'model',
'orderby' => 'title',
'order' => 'asc',
'posts_per_page' => -1
);
$models = get_posts($args);
$model_names = array();
foreach ($models as $i => $model) {
$model_names[$i]['value'] = $model->post_title;
$model_names[$i]['url'] = $model->guid;
$model_names[$i]['tokens'] = explode(' ', $model->post_title);
}
header("Content-type: application/json");
die(json_encode($model_names));
?>
然后,我在预回迁
选项中将此文件的URL用作URL参数。
现在搜索完全按照预期进行:)
适当的解决办法是:
matcher: function (item) {
if (item.toLowerCase().indexOf(this.query.trim().toLowerCase()) == 0) {
return true;
}
所以首先,typeahead.js不对Remote
返回的数据进行任何过滤。预计Remote
返回的数据已经包含了对给定查询的有效建议。
如果您希望typeahead.js处理查询的匹配建议,那么使用prefetch
可能是一个更好的选择,因为您有大约700个条目,您应该会看到相当稳定的性能。如果你选择走这条路,你会想做这样的事情:
$('input[name="s"]').typeahead({
name: 'search',
prefetch: {
url: '/path/to/json/file/that/returns/all/entries',
filter: removeLastNameFromTokens
},
template: '<p><a href="{{url}}">{{value}}</a></p>',
engine: Hogan
});
function removeLastNameFromTokens(data) {
var datum, firstName;
for (var i = 0; i < data.length; i++) {
datum = data[i];
datum.tokens.pop(); // assumes tokens looks like [First, Last]
}
return data;
}
假设/path/to/json/file/that/returns/all/entries
指向包含一组数据的json文件,removeLastNameFromTokens
将遍历每个数据,并从标记中删除姓氏,只留下名字。这将产生您想要的功能。
另一个好策略是结合使用
预取
和远程
。您可以在预回迁
数据中包含大约100个最流行的条目,然后在预回迁
无法产生足够的建议时,依靠远程
来回填建议。
我有一个问题,当查询搜索进程与Firebase Rest API。我使用startAt和endAt参数进行第一次和最后一次搜索,但它仍然没有列出。 我有一个像上面这样的输出。有两批货名为白车和红车。当我找车的时候,我希望他们两个都出来。我哪里犯错了?
问题内容: 我有一些文件: 我想要得到的结果,其匹配的任何值一样 在这种情况下,我想得到结果:一个数组: 我该怎么办?谢谢。 问题答案: 您应该看一下MongoDB 中的运算符。然后将它与find一起使用,以使您的请求更快,可以使用方法:使用它,mongoDB将返回JS对象而不是Mongoose模型/对象。 然后,您可以在结果数组上使用方法: 希望对您有帮助, 最好的问候
我想用html制作datalist这里是一个例子 但是当我搜索“go”时,它会显示两个结果 null 我必须在MySQL中存储的5000多条记录上实现这一点。
我正在尝试捕获异常,但无效。以下是我视图中的代码: 我还尝试了:“除了act_edit.DoesNotExist:”但错误仍然存在“活动匹配查询不存在”。你知道吗? 谢谢
我有这样的桌子 数据如下所示,开始时间和结束时间是连续的时间跨度: 因此,如果用户传递两个参数,则可以在任意时间段内选择* 它应该以如下方式返回表: 你看,棘手的部分是将原始的时间跨度削减到用户定义的时间跨度(@from-@To),我已经为此奋斗了一整天。请指教。 提前非常感谢你!!!
问题内容: 我想知道如何查询字段以完全匹配字符串。 我实际上正在尝试这样查询: 会返回以开头的所有字符串。 问题答案: 我遇到了类似的问题,而ifound修复了“ .raw”-在您的示例中,请尝试