下記のhtmlでは開いた時に最後のリンク行にフォーカスが有る。
これを、jキーでリンク行を上にフォーカスして、
lキーでリンク行を下にフォーカスさせたい。
これは、Jqueryで出来るのだろうか。
下記に今現在のhtmlを示します。
<html>
<head>
<title>メニュー</title>
<script src="http://ajax.googleapis.com/
ajax/libs/jquery/1.12.4/jquery.min.js"></script>
</head>
<body>
<style>
li.hide{display:none;}
</style>
<input type="text" name="keyword" id="keyword">
<input type="button" value="choice" onclick="choice()">
<ol id="target">
<li><a href="./150908-1504.html" target="contents">150908-1504</a></li>
<li><a href="./150908-1515.html" target="contents">150908-1515</a></li>
<li><a href="./150908-1518.html" target="contents">150908-1518</a></li>
<li><a href="./150908-1811.html" target="contents">150908-1811</a></li>
<li><a href="./150908-2004.html" target="contents">150908-2004</a></li>
<li><a href="./150909-0105.html" target="contents">150909-0105</a></li>
<li><a href="./150909-0652.html" target="contents">150909-0652</a></li>
<li><a href="./150909-0925.html" target="contents">150909-0925</a></li>
<li><a href="./150909-1011.html" target="contents">150909-1011</a></li>
<li><a href="./150909-1121.html" target="contents">150909-1121</a></li>
<li><a href="./150909-1232.html" target="contents">150909-1232</a></li>
<li><a href="./150909-1423.html" target="contents">150909-1423</a></li>
<li><a href="./150910-0046.html" target="contents">150910-0046</a></li>
</ol>
<script type="text/javascript">
$(function(){
$("#target li:last-child a")[0].focus();
});
function choice(){
var reg=new RegExp(document.getElementById("keyword").value);
var obj=document.getElementById("target").getElementsByTagName("li");
for(var i=0;i<obj.length;i++){
obj[i].className=(obj[i].textContent.match(reg))?"":"hide";
}
}
</script>
</BODY>
</HTML>
No.1
- 回答日時:
こんな感じ
<script src="ttp://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
<script>
$(function(){
$("#target a").on('focus',function(){
$("#target a").css({"background-Color":""});
$(this).css({"background-Color":"red"});
}).last(0).trigger("focus");
$("#target a").on('keydown',function(e){
var target_a=$(this);
if(e.keyCode==74){
var target_li=$(this).closest('li').prev('li');
target_a=target_li.length==0?$(this).closest('ol').find('a:last-child'):target_a=target_li.find('a');
}else if(e.keyCode==76){
var target_li=$(this).closest('li').next('li');
target_a=target_li.length==0?$(this).closest('ol').find('a:eq(0)'):target_a=target_li.find('a');
}
target_a.trigger('focus');
});
});
</script>
<ol id="target">
<li><a href="./150908-1504.html" target="contents">150908-1504</a></li>
<li><a href="./150908-1515.html" target="contents">150908-1515</a></li>
<li><a href="./150908-1518.html" target="contents">150908-1518</a></li>
<li><a href="./150908-1811.html" target="contents">150908-1811</a></li>
<li><a href="./150908-2004.html" target="contents">150908-2004</a></li>
<li><a href="./150909-0105.html" target="contents">150909-0105</a></li>
<li><a href="./150909-0652.html" target="contents">150909-0652</a></li>
<li><a href="./150909-0925.html" target="contents">150909-0925</a></li>
<li><a href="./150909-1011.html" target="contents">150909-1011</a></li>
<li><a href="./150909-1121.html" target="contents">150909-1121</a></li>
<li><a href="./150909-1232.html" target="contents">150909-1232</a></li>
<li><a href="./150909-1423.html" target="contents">150909-1423</a></li>
<li><a href="./150910-0046.html" target="contents">150910-0046</a></li>
</ol>
有難う御座います。動きしました。助かりました。
動いたんですが、少し分からない所が有りましたので
教えて下さい
$("#target a").on('focus',function(){
$("#target a").css({"background-Color":""});
$(this).css({"background-Color":"red"});
}).last(0).trigger("focus");
上記の部分で、下記が少し分かリ難いのですが。
$("#target a").on('focus',function(){
$("#target a").css({"background-Color":""});
$(this).css({"background-Color":"red"});
})
最初に上記の部分は、#target aにフォーカスした時の匿名関数
の定義で、2つの場合のcssでbackground-Colorを定義しています。
この表記で$("#target a").cssは、フォーカスされていない場合の
カラーを指定して、
$(this).cssはフォーカスされている場合のカラーを指定する。
ここでの表記で$("#target a")と$(this)の表記の違いが良く分かりません。
ここで、thisと言うのは何を示しているんでしょうか。
$("#target a").cssは何とはなしに、何もフォーカスされていない時の
カラーを指定している感じですが。
$(this)と言うのは、構文上ではフォーカスと言う記述が見当りませんので
この文脈はどの様に理解をすれば良いのか、分かりません。
済みません。宜しくお願いします。
No.2
- 回答日時:
> jキーで
> lキーで
ブラウザへのキー入力を制御
https://developer.mozilla.org/ja/docs/Web/API/Ke …
> リンク行を上にフォーカス
> リンク行を下にフォーカス
DOM を辿る jQuery の関数
http://api.jquery.com/category/traversing/tree-t …
余談ではありますが、
hjkl などのキー入力を別の用途に使う人が居るのでご留意ください。
https://vimium.github.io/
https://github.com/ueokande/vim-vixen/blob/maste …
No.3
- 回答日時:
> $("#target a").on('focus',function(){
これは#targe aのどれか一つに対してfocusしたときの動作をしていします
> $("#target a").css({"background-Color":""});
#target aに条件があう全ての要素に対して背景色をクリアにしています
> $(this).css({"background-Color":"red"});
フォーカスしたタグ(つまりはthis)にたいして背景色を設定しています
つまり、全部をクリアして自分を設定するので、フォーカスが移動する前のタグ情報がクリアできます
有難う御座います。
大変に分かリ易い説明で有難う御座います。
$("#target a").on('focus',function(){
$("#target a").css({"background-Color":""});
$(this).css({"background-Color":"red"});
})
上記の後に続く、.last(0).trigger("focus");
は、last(0)は、一番最後にフォーカスしたと言う事の
プロパティになるんでしょうか。
trigger("focus")と言うのは、メソッドと言う事でしょうか。
そうすると、$("#target a").on('focus',function(){..})
と言う匿名関数はオブジェクトを返すと言う事でしょうか。
済みません。また疑問が出て来ました。
.last(0).trigger("focus");の所の文脈の理解が出来ません。
ここが一番大事な所ですが、今いち、全体の文脈を理解し辛いです。
宜しくお願いします。
No.4ベストアンサー
- 回答日時:
> .last(0).trigger("focus");の所の文脈の理解が出来ません。
これはjQueryではよく使われる手法ですが、初期状態でメソッドを実行させる方法です。
つまり
$("#target a").on('focus',function(){
・・・
})
までのククリで#target aにfocusイベントを設定しておいた状態で、
}).last(0).trigger("focus");
イベントを発生させています、つまり
$("#target a").last(0).trigger("focus");
を実行しているわけです。
これはすなわち#targetないの最後のaにfocusさせています。
書き方としては
$("#target a").last(0).focus();
のようなイメージですが、文字列として「focus」を渡すことで実行できるのは
プログラムとして汎用性が高くなるので往々にしてtriggerが使われることが多くなります
有難う御座います。
分かりやすい説明有難う御座います。
$("#target a").on('keydown',function(e){
var target_a=$(this);
if(e.keyCode==74){
var target_li=$(this).closest('li').prev('li');
target_a=target_li.length==0?$(this).closest('ol').find('a:last-child'):target_a=target_li.find('a');
}else if(e.keyCode==76){
var target_li=$(this).closest('li').next('li');
target_a=target_li.length==0?$(this).closest('ol').find('a:eq(0)'):target_a=target_li.find('a');
}
target_a.trigger('focus');
});
ここで、if(e.keyCode==74){...の処理では、prevの処理を
target_a=target_li.length==0?$(this).closest('ol').find('a:last-child'):target_a=target_li.find('a');
上記は、target_li.length==0と言う事は、liの要素が一つしか無かった。
そうで無い時は、target_a=target_li.find('a');に依り値をセットする。
最後に、target_a.trigger('focus');でフォーカスを移動すると言う事でしょうか。
と認識しましたが、合っているでしょうか。
宜しくお願いします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) pythonのWebスクレイピングでfind_allだとurlがNoneに 4 2022/04/17 18:21
- HTML・CSS 書籍を見つつサイト造りの練習をしているのですが、見た目が一致しません 2 2022/11/28 15:00
- JavaScript jqueryを使ったスムーススクロールのコードを書いたのですが、HTMLコード内にある、a butt 2 2022/04/14 10:59
- HTML・CSS cssの display: flex;で横並びにならずに困ってます 1 2022/12/04 13:18
- HTML・CSS CSSが上手く反映されないみたいです 2 2022/11/21 16:19
- HTML・CSS HTML & CSS 縦ボックス内の文字の左右センタリング 3 2023/03/25 04:23
- HTML・CSS ヘッダーの画像にメインエリアがかぶってしまいます 1 2022/11/28 14:06
- HTML・CSS テキストを画面の真ん中に配置したいです。 2 2022/11/25 16:11
- HTML・CSS htmlについて質問です! 写真のように写真の部分が?になってしまいます。 ファイルもしっかり選べて 1 2023/07/09 21:17
- HTML・CSS インラインブロックの中のテキストを上下中央に合わせたい 1 2022/12/24 17:46
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
jqueryのsortableで一部ソート...
-
どの<li><a> が押されたか判別...
-
質問に答えていくと、回答によ...
-
【javascript で動的に a タグ...
-
クリックした<a>タグのみにClas...
-
DOM の 要素の数え方について
-
javascriptでEnterキーをtabキ...
-
固定ナビのJqueryのアコーディ...
-
<ul>から</ul>の間をjavascriptで
-
jQuery タブメニューへのダイ...
-
戻ってきた時ツリーメニューが...
-
C# ブラウザの自動クリック
-
jQueryで、リンクURLの一致を確...
-
【jQuery】遅延実行(タイムラ...
-
JQueryタブのアクティブ アン...
-
チェックボックスに入っている...
-
オンマウスで画像ロールオーバ...
-
文字と数字が混在する要素のsor...
-
MAX関数を使ってからLEFT JOIN...
-
javascriptテキストBOX色を元に...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
jqueryのsortableで一部ソート...
-
javascriptでEnterキーをtabキ...
-
クリックした<a>タグのみにClas...
-
チェックボックスに入っている...
-
【javascript で動的に a タグ...
-
jquery ドロップダウンメニュー...
-
「jQuery」アコーディオンメニ...
-
jQueryで、リンクURLの一致を確...
-
jQueryのeqで最後からn番目以降...
-
ネストされたチェックボックス...
-
javascriptで、クリックしたら...
-
onmouseoverの表示切り替えが上...
-
文字と数字が混在する要素のsor...
-
jQueryでネスト構造の<li>がク...
-
タブメニューを上下に設置
-
<li></li>の数を制限
-
jQuery多層式アコーディオンメ...
-
どの<li><a> が押されたか判別...
-
CSSとJavaScriptを使ってドロッ...
-
複数の画像をランダム(シャッ...
おすすめ情報
$("#target li:last-child a")[0].focus();
上記を、下記の様に変更すると、
$("#target li:last-child a")[0].prev().focus();
TypeError: $(...)[0].prev is not a function
上記のエラーが出る。
有難う御座います。
最後にリンクをする場合にどうするかは
質問を再度提出します。
有難う御座います。