下記のHTMLとCSSを前提にして、「.one」から「200px」を取得するコードを作ってみました。
コードの意図としては、$('要素').style('width');
だと、「HTMLのwidth」じゃなくて、「実際のwidth」が取得されるから、「HTMLのwidth」をなんとか取得してやろう、という感じです。
でもコードがスゲーかっこ悪いんです。
スゲーかっこいい人がいたら、教えてくれませんでしょうか?
###前提のHTMLとCSS
この「.one」から「200px」を取得したいのに、$('要素').style('width');
だと取得できないんです。
html
1<div class="flex"> 2 <div class="one" style="min-width:100px; width:200px;"> 3 <div class="a">aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa</div> 4 </div> 5 <div class="two" style="min-width:500px;"> 6 <div class="a">aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa</div> 7 </div> 8</div>
css
1.flex { 2 display: flex; 3 justify-content: space-between; 4 align-items: start; 5 width: 500px; 6}
###「.one」から「200px」を取得するコード
これが自分のコードですが、スゲーかっこ悪いっす。
jQuery
1/* 2これでは「100px」が取得されてしまう 3*/ 4const width = $('.one').css('width'); 5console.log (width ); // 100px 6 7/* 8200px が取得できた!けどかっこ悪い! 9*/ 10const attr = $('.one').attr('style'); 11console.log( getStyle( 'width', attr ) ); // 200px 12 13function getStyle( want, attr ){ 14 let init = attr.split(';'); 15 let splited = []; 16 $.each(init,function(i,v){ 17 const replaced = v.replace(/\s+/g, ""); 18 const key = replaced.split(':')[0]; 19 const val = replaced.split(':')[1]; 20 splited.push( { [key]:val } ); 21 }); 22 let result; 23 $.each(splited,function(i,v){ 24 if( Object.keys(v)==want ){ 25 result = v[want] 26 } 27 }); 28 return result; 29}
回答2件
あなたの回答
tips
プレビュー