我正在使用 Twitter typeahead.js 搜索名称列表,并且客户希望根据名字获得建议。
是否可以选择让 Twitter typeahead.js 将搜索查询与每个结果的开头匹配,而不是字符串中的任何位置?
我可以beginsWithQuery
在函数中看到一个变量_updateHint
,但是我不知道如何将其指定为选项,或者即使这与我想要实现的目标有关。
在我的项目中调用 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
is 格式的响应
[
{ "tokens" : [ "First","Last" ],
"url" : "http://url/for/first-last/",
"value" : "First Last" },
]
所以我需要弄清楚如何过滤这个 JSON 以仅包含token[0]
与搜索查询匹配的数据。
编辑:关于我必须添加什么来实现prefetch
解决方案工作的附加说明,按照下面的@jharding 的anwser。
这是一个 WordPress 网站,网站搜索的名称是自定义帖子类型“模型”的标题。我创建了一个名为 list-all-models.php 的文件,它以所需的数据格式输出模型名称的数组。
<?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 作为prefetch
选项中的 url 参数。
现在搜索完全按预期工作:)