兄弟のスタックがあり<DIV>
、ユーザーが上下の矢印を使用してリストを上下に移動し、アイテムを「強調表示」できるようにしたいと考えています。常に 1 つの項目のみを強調表示する必要があります。
これを行う最も簡単な方法は何ですか?
兄弟のスタックがあり<DIV>
、ユーザーが上下の矢印を使用してリストを上下に移動し、アイテムを「強調表示」できるようにしたいと考えています。常に 1 つの項目のみを強調表示する必要があります。
これを行う最も簡単な方法は何ですか?
$(document).keyup(function(e) {
var $hlight = $('div.hlight'), $div = $('div');
if (e.keyCode == 40) {
$hlight.removeClass('hlight').next().addClass('hlight');
if ($hlight.next().length == 0) {
$div.eq(0).addClass('hlight')
}
} else if (e.keyCode === 38) {
$hlight.removeClass('hlight').prev().addClass('hlight');
if ($hlight.prev().length == 0) {
$div.eq(-1).addClass('hlight')
}
}
})
わかった...
var highlight = function(upOrDown){
var highlighted = $("#daddyDiv > div.higlighted");
if(highlighted[0] == null){
//If nothing is highlighted, highlight the first child
$("#daddyDiv > div:first").addClass("highlighted");
} else {
//Highlight the next thing
if(upOrDown == "down" && highlighted.index() != $("#daddyDiv > div").length()){
$("#daddyDiv > div").eq(highlighted.index()+1).addClass("highlighted");
$("#daddyDiv > div.higlighted").removeClass("highlighted");
} else if(upOrDown == "up" && highlighted.index() != 1){
$("#daddyDiv > div").eq(highlighted.index()-1).addClass("highlighted");
$("#daddyDiv > div.higlighted").removeClass("highlighted");
}
}
};
//Assuming you are using up/down buttons...
$("#upButton").click(function(){ highlight("up"); });
$("#downButton").click(function(){ highlight("down"); });
//Using the arrow keys...
$("body").keyup(function(e){
if(e.keyCode == "40"){
//Down key
highlight("down");
} else if(e.keyCode == "38"){
//Up key
highlight("down");
}
});
ID やクラスを使用せずにそれを行う 1 つの方法を次に示します。動作する jsfiddle の例は、こちらから入手できます(最初に [結果] ペインをクリックしてください)。
ジャバスクリプト:
var $currentDiv = $("#myContainer").children().first();
$currentDiv.css("background", "red");
$("html").keyup( function(keyEvent) {
if (keyEvent.keyCode == 40 ) {
var $nextDiv;
if ($currentDiv.next().size() == 0) {
$nextDiv = $("#myContainer").children().first();
}
else {
$nextDiv = $currentDiv.next();
}
$currentDiv.css("background", "");
$nextDiv.css("background", "red");
console.log($nextDiv);
console.log($currentDiv);
$currentDiv = $nextDiv;
}
else if (keyEvent.keyCode == 38) {
var $previousDiv;
if ($currentDiv.prev().size() == 0)
$previousDiv = $("#myContainer").children().last();
else {
$previousDiv = $currentDiv.prev();
}
$currentDiv.css("background", "");
$previousDiv.css("background", "red");
$currentDiv = $previousDiv;
}
});
html:
<div id="myContainer">
<div> Div 1 </div>
<div> Div 2 </div>
<div> Div 3 </div>
<div> Div 4 </div>
</div>
私はこれを作りました: http://jsfiddle.net/JPy76/。
基本的に、上下に移動すると強調表示されたクラスが削除され、次/前に追加されます。最後のコードの後に下に移動する/最初のコードの後に上に移動するには、追加のコードが必要です。
$('body').keydown(function(e) {
if(e.keyCode === 40) {
if($('.highlighted').next().length) {
$('.highlighted').removeClass('highlighted')
.next().addClass('highlighted');
}
else {
$('.highlighted').removeClass('highlighted');
var d = $('div');
d.length = 1;
d.addClass('highlighted');
}
}
if(e.keyCode === 38) {
if($('.highlighted').prev().length) {
$('.highlighted').removeClass('highlighted')
.prev().addClass('highlighted');
}
else {
$('.highlighted').removeClass('highlighted');
var d = $('div');
d = $(d[d.length - 1]);
d.addClass('highlighted');
}
}
});