我有一个使用 ng-repeat 重复的列表项。此列表项是关键字建议的列表。当用户按下向下/向上箭头时,我想使用 jquery 来简单地添加一个突出显示的 css 类,但我的 jquery 不起作用可能是因为建议是通过 angular 插入的。如何让 jquery 获取当前在 DOM 上的关键字建议,以便我的下一个和上一个工作?
HTML:
<input type="text" placeholder="Destination" id="destination" data-ng-model="user_keyword" ui-event="{keyup: 'change($event, user_keyword)'}">
<ul>
<li data-ng-repeat="suggestion in suggestions">
<a href="#" class="{{suggestion.highlight}}" data-ng-bind-html-unsafe="suggestion.place"></a>
</li>
</ul>
JavaScipt:
//Change is triggered every time a key is entered into input field
$scope.change = function(e, term){
var result_id = 'destination';
var input = $('#'+'destination');
var result_container = $(result_id);
var list_items = result_id+' li';
var selected_class = 'highlight';
var code = e.keyCode || e.which;
var $prev, $next, $current = $(list_items+'.'+selected_class);
var currentSelectedhtml;
//key down press
if (code === 40) {
$(list_items+":first").addClass(selected_class);
currentSelectedhtml = $(list_items+":first");
//key down or key right pressed
} else if (code === 39 || code === 40) {
$next = $current.next("li");
if ($next.length) {
$current.removeClass(selected_class);
$next.addClass(selected_class);
currentSelectedhtml = $next.html();
}
//key up or key left press
} else if (code === 37 || code === 38) {
$prev = $current.prev("li");
if ($prev.length) {
$current.removeClass(selected_class);
$prev.addClass(selected_class);
currentSelectedhtml = $prev.html();
}
}
};
我还应该补充一点,这个输入字段位于使用 angularstrap 的模态框内,这可能与问题有关(不确定)。
总结一下如何让 jQuery 拾取由 angular 创建的列表项?
在理想的情况下,我宁愿只使用 angular,但我不能完全弄清楚如何做到这一点,因为需要 next() 和 prev() 否则看起来我将不得不使用一些冗长的 for 循环。