番号と照合する処理を繰り返す方法を探しております。
下記のHTMLで、ancestor="x-a-c-g"
を基準として、リストと照合し、
ancestor="x-a-c-g"
を表示
ancestor="x-a-c"
を表示
ancestor="x-a"
を表示
という風に最後の2つになるまで照合する処理を繰り返すことが目的です。
html
1<style> 2.list {display: none;} 3<style> 4 5<li class="list"> 6 Xさん</li> 7<li class="list" ancestor="x"> 8 aさん(xさんの子)</li> 9<li class="list" ancestor="x-a"> 10 bさん(aさんの子)</li> 11<li class="list" ancestor="x-a"> 12 cさん(aさんの子)</li> 13<li class="list" ancestor="x"> 14 dさん(xさんの子)</li> 15<li class="list" ancestor="x-a-c"> 16 eさん(cさんの子)</li> 17<li class="list" ancestor="x-d"> 18 fさん(dさんの子)</li> 19<li class="list" ancestor="x-a-c"> 20 gさん(cさんの子)</li> 21<li class="list" ancestor="x-a-b"> 22 hさん(bさんの子)</li> 23<li class="list" ancestor="x-a-b-h"> 24 iさん(hさんの子)</li> 25<li class="list" ancestor="x-a-c-g"> 26 jさん(gさんの子)</li> 27<li class="list" ancestor="x"> 28 kさん(xさんの子)</li> 29<li class="list" ancestor="x-a-c-e"> 30 lさん(eさんの子)</li> 31<li class="list" ancestor="x-a-c-g"> 32 mさん(gさんの子)</li> 33<li class="list" ancestor="x-a-c-g-m"> 34 nさん(mさんの子)</li>
イメージとしては下記のようなjQueryになると思うのですが、処理を繰り返す方法がわからず、お恥ずかしながらこのような書き方になってしまいます。
jQuery
1//ターゲット 2var target = 'x-a-c-g'; 3 4//ターゲットのリスト(mさん、jさん)を表示 5$( '.list' ).each( function() { 6 var list = $(this).attr('ancestor'); 7 if( target == list ){ 8 $(this).fadeIn(); 9 } 10}); 11 12//ターゲットの先祖のリスト(gさん、eさん、cさん、bさん)を表示 13$( '.list' ).each( function() { 14 15 //【1】1段前の親(gさん、eさん)を開く 16 var list_slice1 = $(this).attr('ancestor').split('-').slice(0, -1).join('-'); 17 var target_slice1 = target.split('-').slice(0, -1).join('-'); 18 if( target_slice1 == target_slice1 ){ 19 $(this).fadeIn(); 20 } 21 22 //【2】2段前の親(cさん、bさん)を開く 23 var list_slice2 = $(this).attr('ancestor').split('-').slice(0, -2).join('-'); 24 var target_slice2 = target.split('-').slice(0, -2).join('-'); 25 if( target_slice2 == target_slice2 ){ 26 $(this).fadeIn(); 27 } 28 29}); 30
質問をまとめますと、jQueryの【1】【2】の部分を繰り返す方法についてです。
(ただし基準となるのはancestor="x-a-c-g"
とは限らずancestor="x-a-c-g-m-p-t-w"
になったりと都度その長さが異なるので、上のjQueryのように「sliceする数を増やす」ではいくつ増やせばいいかわかりません。きっと正しい処理は「基準のハイフンが1個になるまで繰り返す」のようなイメージかと思います。)
親子関係にしては構造がおかしなHTMLで大変恐縮ですが、ひとまずこの構造で目的が達成できるような方法をご教示頂ければ幸甚に存じます。
どんなアドバイスでも構いませんので、何卒ご指導のほど宜しくお願い申し上げます。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/09/05 01:35