LoginSignup
1
1

More than 5 years have passed since last update.

n親等までqueryを表示する。

Last updated at Posted at 2018-03-25

複雑なdomだとqueryがわからない時がある。

自身を含めてdomを遡りqueryを取得する。

let fn={};
fn.sq=(d,opt=2)=>{
 let f=(d)=>{return (d)?[
   d.tagName.toLowerCase()
   ,(d.classList.length!=0)?'.'+[].slice.call(d.classList).join('.'):''
   ,(d.id&&d.id!='')?('#'+d.id):''
   ,(d.name)?`[name="${d.name}"]`:''
  ].join(''):null;
 }
 ,now=d
 ;return Array.from({length:opt})
  .map((d,i)=>{now= (now)?(i===0)?now:now.parentElement:null;return now})
  .map(d=>f(d)).filter(d=>d).reverse().join('>')
 ;
}
;
//fn.sq(element,3); //parent from me to 3. //div.temp>div.f>div.ed.of-editer

querySelectorでそのまま使える。

document.querySelector('div.temp>div.f>div.ed.of-editer')
//<div class="ed of-editer" contenteditable="plaintext-only">ee</div>

全部

let fn={};
fn.sq=(d,opt=2)=>{
 let f=(d)=>{return (d)?[
   d.tagName.toLowerCase()
   ,(d.classList.length!=0)?'.'+[].slice.call(d.classList).join('.'):''
   ,(d.id&&d.id!='')?('#'+d.id):''
   ,(d.name)?`[name="${d.name}"]`:''
  ].join(''):null;
 }
 ,now=d
 ;return Array.from({length:opt})
  .map((d,i)=>{now= (now)?(i===0)?now:now.parentElement:null;return now})
  .map(d=>f(d)).filter(d=>d).reverse().join('>')
 ;
}
;
let el=document.createElement('input')
,caller=function(ev){ if(ev.target!=el)el.value=fn.sq(ev.target,3)}
el.style.cssText='position:fixed;top:0;right:2rem;width:22rem;'
document.body.appendChild(el);
document.body.addEventListener('click',caller,false);
;
<!------test dom------>
<section id="app">
<div class="left of-side">
<div class="has-top">top</div>
<div class="has-bottom">bottom</div> 
</div>
<div class="center"></div>
<div class="right of-side">
<div class="has-top">top</div>
<div class="has-bottom">bottom</div> 
</div>
<!------------------>
<div class="temp">
 <div class="f"><div class="ed of-editer" contenteditable="plaintext-only">ee</div><div class="info">a</div></div> 
</div> 
</section>

注意

全く同一構成の要素はわからない。例えば、liの何番目か等。
あくまで、どのフレームに対して処理を行えばいいか知るのが目的。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1