将所选类别循环到ul>李用加载更多按钮
Cycling selected class to ul > li with load more button
这本应该很简单,但到处都会发生意想不到的行为!
我有一个如下结构的列表
HTML
<ul class = "question-list">
<li class="question"> something </li>
<li class="question"> something </li>
<li class="question"> something </li>
<li class="question"> something </li>
<li class="question"> something </li> //Shouldn't this be li:last-child?
<a class="load-more" href="#">Load More</a>
</ul>
默认情况下,该列表显示5篇文章,然后在单击a.load-more
时再加载5篇,直到加载完所有文章。加载完所有帖子后,a.load-more
将消失。这就是默认情况下DOM的呈现方式。
JS
Template.foo.onRendered( function() {
$(document).keydown(function(e) {
var keyCode = e.keyCode || e.which;
if (keyCode == 74) { //Keydown J
var listItem = $('ul.question-list > li.question');
var listItemFirst = $('ul.question-list > li.question:first-child');
var selectedChild = $('ul.question-list > li.question.selected-child');
if($('input').is(":focus")|| $('textarea').is(":focus")){
return null; //Do not activate when input or textarea is focused
} else {
e.preventDefault();
if(! $(listItem).hasClass('selected-child')){
$(listItemFirst).addClass('selected-child'); //select first child if ul > li has no selected item
} else
if( $(listItemFirst).hasClass('selected-child')) {
$(listItemFirst).removeClass('selected-child');
$('ul.question-list > li.question:last-child').addClass('selected-child'); //if first child is selected, select last child
} else {
selectedChild.removeClass('selected-child');
selectedChild.prev().addClass('selected-child'); // if above all is not the case, select previous li
}
}
}
});
});
JS按照自己的评论行事。
现在,这应该可以正常工作,但我遇到了以下问题。
- 当导航离开和返回时,李的选择顺序是混乱的。(即,按第二、第四、第三、第一的顺序选择。刷新时固定)
- 如果有更多的帖子要加载,最后一个子将不会选择
编辑1
问题2解决了(感谢@Fabrizio Calderan)。我把a.load-more
移出了ul。然而,当来回导航时,选择的顺序会混乱。
首先,从UL获取"加载更多"链接。UL应仅包含LI元素。
然后,在keydown处理程序中,您会发现它更简单:
- 找到当前所选的li元素,并从中删除className"selected child"
- 计算要选择的li的索引
- 将className"selected child"添加到具有计算索引的li中
Template.foo.onRendered( function() {
$(document).keydown(function(e) {
var keyCode = e.keyCode || e.which,
c = 'selected-child',
$listItems, $selected, index;
if (keyCode == 74) { //Keydown J
if($('input').is(":focus") || $('textarea').is(":focus")) {
return;
} else {
$listItems = $('.question-list li');
$selected = $listItems.filter('.' + c).removeClass(c);
// *** to go backwards through the list ***
index = ($selected.length == 0) ? 0 : $selected.index() - 1;
if(index < 0)
index = $listItems.length - 1;
// *** to go forwards through the list ***
//index = ($selected.index() + 1) % $listItems.length;
$listItems.eq(index).addClass(c);
}
}
});
});
相关文章:
- 如何更改<svg>标记为<img>用js标记
- 通过点击<李>在jQuery中
- 将所选类别循环到ul>李用加载更多按钮
- 如何附加<ul><李>元素位于某个特定条件的父元素列表之间
- 选择<李>使用普通JavaScript的子节点,而不是孙节点
- 如何停止CKEditor用<br>
- 如何制作href链接和<李>在一个包装中
- 排序<李><Ul>根据<span>内部<李>
- CSS/.JS问题,<ul><李>在Megamenu中
- 如何附加<李>至<ul>使用可拖动和可丢弃
- jQuery可读性:在<李>要素
- 触发器<输入类型=“;文件“>用angular程序选择文件
- 更改每个<李>元素在<ol>
- 寻呼<李>javascript不起作用
- 检测活动<李>用于jQuery转盘(分页)
- 如何创建一个新的<李>带有复选框或<a>在里面
- 想要使当前<李>忙碌的
- 如何将Array转换为<ul><李>以字母为标题的字母列表
- 拉斐尔用<李>
- SVG & lt;用gt;标记现在显示时,编程插入