質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

Q&A

解決済

2回答

3699閲覧

jQueryで「兄」と「従兄」をまとめて取得するには

elpha

総合スコア18

jQuery

jQueryは、JavaScriptライブラリのひとつです。 簡単な記述で、JavaScriptコードを実行できるように設計されています。 2006年1月に、ジョン・レシグが発表しました。 jQueryは独特の記述法を用いており、機能のほとんどは「$関数」や「jQueryオブジェクト」のメソッドとして定義されています。

0グッド

0クリップ

投稿2018/11/11 05:05

編集2018/11/11 05:07

javascript

1<ul> 2 <li></li> 3 <li></li> 4 <li></li> 5 <li></li> 6 <li></li> 7</ul> 8<ul> 9 <li></li> 10 <li></li> 11 <li></li> 12 <li></li> 13 <li></li> 14</ul> 15<ul> 16 <li></li> 17 <li></li> 18 <li>す★</li> 19 <li></li> 20 <li></li> 21</ul>

となっており、「す」が$(this)である場合、
「あ い う え お か き く け こ さ し」 もしくは
「あ い う え お か き く け こ さ し す」 を取得するにはどうすればよいでしょうか?

できれば順番も「あいうえおかきくけこさし(す)」になるようにしたいのですが…
('li').index($(this))を使えばいけそうかな?と思うものの、nextUntil()などは兄弟のみですし、なかなか適切な選び方がわからず困っています。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

jQueryで要素を取得する場合、一度に取得できるのは、ある要素から見て、

  1. 先祖(自分を含む場合あり)
  2. 子孫
  3. 兄弟(自分を含む場合あり)

になります。

「いとこ」を取得するには、「親の兄弟の子孫」や「(共通の)先祖の子孫」といった考え方になります。

elphaさんのケースだと、以下のようになります。

  1. ul要素の上に共通の先祖(ul要素をすべて囲む要素)があるか不明なので、ないものとして書きます。
  2. 「『す』が$(this)である場合」といった文言があるので、実際には他の文字の場合も対応すべきなのだろう思います。そのため、例として「クリックした要素から見て、従兄(と自分)要素を取得する」こととします。
  3. 最終的に取得したい要素を含んだjQueryオブジェクトを$targetとします。

JavaScript

1$('li').on('click', function() { 2 var $clicked = $(this); // 基準となる要素 3 var $brother = $clicked.prevAll() // 兄要素 4 var $cousin = $clicked.parent().prevAll().children(); // 親の兄要素の子要素 5 6 // 従兄と兄をひとつのjQueryオブジェクトに 7 var $target = $cousin.add($brother); 8 9 // 基準となる要素も含める場合 10 $target = $target.add($clicked); 11 12 // 確認用にコンソールに出力 13 console.log($target); 14});

投稿2018/11/11 11:54

編集2018/11/11 11:55
NozomuIkuta

総合スコア1260

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

elpha

2018/11/28 04:40

add()は使ったことがありませんでしたが良さそうですね! 一見「かきくけこあいうえおしさす」という順番になるのかなと思いましたが、ちゃんと「あいうえおかきくけこさしす」という順番で出力されるのですね。 > jQuery リファレンス:add > http://www.jquerystudy.info/reference/traversing/add.html によると「追加した順ではなくHTML上に配置されていた順番になる」とのことですか… つまりprevAll()による逆転を無視できるということで、こういう場合には便利ですね!
NozomuIkuta

2018/11/28 11:41

参考になったようでよかったです。 もし解決していれば「解決済」の設定にしていただくと、他の方が質問を探すときに便利になるので、お願いします。
guest

0

ベストアンサー

javascript

1<script> 2$(function(){ 3 $('li').on('click',function(){ 4 var ani1=$(this).closest('ul').prevAll('ul').find('li').map(function(){ 5 return $(this).text(); 6 }).get(); 7 var ani2=$(this).prevAll('li').map(function(){ 8 return $(this).text(); 9 }).get().reverse(); 10 console.log(ani1.concat(ani2)); 11 }); 12}); 13</script> 14<div> 15<ul> 16 <li>対象外</li> 17</ul> 18</div> 19<div> 20<ul> 21 <li></li> 22 <li></li> 23 <li></li> 24 <li></li> 25 <li></li> 26</ul> 27<ul> 28 <li></li> 29 <li></li> 30 <li></li> 31 <li></li> 32 <li></li> 33</ul> 34<ul> 35 <li></li> 36 <li></li> 37 <li></li> 38 <li></li> 39 <li></li> 40</ul> 41</div>

あとは一発でやるならこうとか

javascript

1$(function(){ 2 $('li').on('click',function(){ 3 var ani=$(this).closest('div').find('li:lt('+$(this).closest('div').find('li').index(this)+')').map(function(){ 4 return $(this).text(); 5 }).get(); 6 console.log(ani); 7 }); 8}); 9

投稿2018/11/12 03:01

編集2018/11/12 03:32
yambejp

総合スコア114779

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

NozomuIkuta

2018/11/12 03:27

別解ありがとうございます。 確かに、elphaさんは「文字列」がとりたかったのかもしれません。
elpha

2018/11/28 20:24

まさにこういう、index(this)を使ったやり方をイメージしていました! map()は使ったことがありませんでしたが、おかげさまでよくイメージできました。 ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問