如何使用 jquery 获取下一个/上一个链接,无论它在 DOM 中的位置如何
How can I get the next/prev link with jquery regardless of where it is in DOM?
无论它放置在DOM中的哪个位置,我如何找到下一个或上一个<a>
?
当我按下键时,我想突出显示下一个<a>
,当我按下时,我想突出显示前一个,无论它在 DOM 中的哪个位置嵌套。
<div id="info">
<span><a href="#info">How can I get this when pressing up?</a></span>
<a class="focus" href="#home">I'm here - and will either press up or down</a>
<div>
<ul>
<li><a href="#foo">How can I get this when pressing down?</a></li>
<li><a href="#bar">Another link</a></li>
</ul>
</div>
</div>
我尝试过next()
、nextAll()
、prev()
和prevAll()
,但运气不好。
这就是我到目前为止所拥有的
$(document).keypress(e){
var keyCode = e.keyCode;
switch (keyCode) {
case 38:
e.preventDefault();
$("body").trigger('nav', 'up');
break;
case 40:
e.preventDefault();
$("body").trigger('nav', 'down');
break;
}
$("body").bind('nav', function(direction){
var currentLink = $(".focus").first();
if(direction === 'up'){
var prevLink = ???
} else if (direction === 'down'){
var nextLink = ???
}
});
});
这是我
在jsfiddle上编写的基本代码,你可以从开始。
http://jsfiddle.net/sabri/skXZT/10/
爪哇语
var allLink = jQuery('a');
var currentHighLight = allLink.filter('.highlight');
$('body').keyup(function(event) {
index = allLink.index(currentHighLight);
currentHighLight.removeClass('highlight');
if (event.which == 38) {
allLink.eq(index-1).addClass('highlight')
} else if (event.which == 40) {
allLink.eq(index+1).addClass('highlight')
}
currentHighLight = allLink.filter('.highlight');
});
在向下键上,执行以下操作:
if($('a[cur="1"]').length==0) {
$('a:first').attr('cur', "1");
$('a:first').addClass('highlight');
return false;
}
var previous = null, next = null;
$('a').each(function() {
if(previous!=null && $(previous).attr('cur')=='1') {
$(previous).removeAttr('cur');
$(previous).removeClass('highlight');
$(this).attr('cur', "1");
$(this).addClass('highlight');
return false;
}
previous = this;
}
在向上键上,执行以下操作:
if($('a[cur="1"]').length==0) {
$('a:first').attr('cur', "1");
$('a:first').addClass('highlight');
return false;
}
var previous = null;
$('a').each(function() {
if($(this).attr('cur')=='1') {
$(this).removeAttr('cur');
$(this).removeClass('highlight');
if(previous!=null) {
$(this).attr('cur', "1");
$(this).addClass('highlight');
}
else {
$('a:last').attr('cur', "1");
$('a:last').addClass('highlight');
}
return false;
}
previous = this;
}
相关文章:
- 在单击任何位置时隐藏元素,而不检查每次DOM单击
- 如何'剪切'DOM元素并将其显示在其他位置
- 在jquery中是否有任何方法或位置可以编写从Dom中删除页面后调用的方法
- 如何在不创建新元素的情况下修改 DOM 元素的位置
- 在插入符号位置获取DOM元素
- DOM数组中的位置
- 移动项在DOM中的位置
- 获取所选元素的位置,而不是 DOM 中元素的索引
- 返回的y值大于实际y位置[JS(无jQ)/DOM]
- 在 DOM 中添加新元素后,保留元素屏幕位置
- 从 DOM 中删除元素并将它们添加回原来的位置
- 使用 javascript 在 dom 树中向上或向下移动一个位置
- 我将如何获得角色的DOM位置
- 拖动时记录DOM位置
- 在CompositeView - Marionette中传递ItemView的DOM位置
- ui-sortable不工作(对于预定义的DOM位置)
- 如何根据元素数组中的DOM位置聚焦无效元素
- 将提醒DOM位置的代码
- 更改动态创建的标签的DOM位置
- 查找函数调用的DOM位置