野菜の文字数に合わせて
野菜はどこにあるねん
野菜の文字数教えてくれって質問で野菜がないってどういうことやねん
ツッコミはさておき見ていきましょう。
まずはeachの使い方からおさらい。
書式はjQueryObject.each( function(index, Element) )
です。
jQueryオブジェクトはDOMツリーを検索した結果の、
擬似的な「要素の配列」といった存在のオブジェクトを指します。
eachという英単語を翻訳すると「各々」といった感じの意味で、
この配列として取れたDOM君すべてに、各々この関数を実行しなさいといった感じの命令となります。
したがって、引数は「各々で実行する」を満たす為に必要な情報が格納されます。
- 第一引数index: 0から始まる配列のindex値、
jQuery.get(index)
等としてアクセスできる
- 第二引数element: 配列の1要素、jQueryではなくDOM APIの正式なElementを指す
この前提条件をJSのコードを見ていきましょう。
※HTMLがわからないので完全にヤマカンです。
JavaScript
1$(function () {
2 $('.txtlength').each(function(){
3 var yasaiTxt = $('.txtlength').length);
4 $(this).css('width', yasaiTxt + 'em');
5 });
6});
要点は.txtlength
です。
jQueryは$(CSSセレクタ)
でDOMツリーを検索して対象となるDOMを見つけて配列(jQueryオブジェクト)として返してくれます。
つまり、ドットで始まる.txtlength
はクラス名ということがわかります。
なら現状のHTMLはこんな感じにしてるんじゃないですかね?
HTML
1<ui class="vegetables">
2 <li>
3 <h3>水菜</h3>
4 <span class="txtlength" style="display: none;">2</span>
5 </li>
6 <li>
7 <h3>大根</h3>
8 <span class="txtlength" style="display: none;">2</span>
9 </li>
10</ui>
もしそうなら子供要素の.txtlengthを検索してきて、
CSSの横幅をいじったとしても親要素のliとしては大したことないですよね?
$(this).parent().css()
みたいな感じで親のブロック要素を直接いじる必要が出てきます。
また、JavaScriptの世界では文字列はtext.length
という風に.length
で文字数を取得出来ますので、
「水菜」の横に「Radish」等と日本語と英語がごちゃ混ぜでない限りは野菜名のみで上手くいくでしょう。
したがってtxtlengthという文字数だけを格納したタグは不要です。
上記のHTML想定ですが、セレクタは.vagetables li
にしましょう。
コードに落とし込むとこんな感じになります。
HTML
1<ui class="vegetables">
2 <li>
3 <h3>水菜</h3>
4 </li>
5 <li>
6 <h3>大根</h3>
7 </li>
8</ui>
JavaScript
1$(function () {
2 $('.vagetables li').each(function(){
3 var yasaiTxt = $(this).find('h3').text();
4 $(this).css('width', yasaiTxt.length + 'em');
5 });
6});
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/08/20 08:31