htmlで、ベタ書きしている箇所をループにしたいだけなんですが、
一日近く格闘して、どうにもうまくいきません。
ベタ書きの下記htmlでは、slctline2~6の<div th:replace="this :: sortAjaxBody"></div>の部分が、slctline1の<div th:fragment="sortAjaxBody">で囲まれた部分と置き換わり、画面にプルダウンなどが6個並んだ状態になるのですが、
ループ(※いろいろ試しましたがいったん割愛)にし、html的にはベタ書きと同じ形までもっていくことはできるのですが、<div th:replace="this :: sortAjaxBody"></div>が置き換わらずにそのままです。画面には表示されません。
Thymeleafにこだわりがあるわけではなく、slctline1の内容をitmMap のサイズ分だけID付きで並べたい、というのが目指すゴールになります。
アドバイスをいただけるとありがたいです。
java
1(コントローラからこういうMAPを送っています) 2private static final Map<String, String> itmMap = Collections 3 .unmodifiableMap(new LinkedHashMap<String, String>() { 4 { 5 put("いちご","fluit1"); 6 put("りんご","fluit2"); 7 put("めろん","fluit3"); 8 put("ばなな","fluit4"); 9 put("もも","fluit5"); 10 put("さくらんぼ","fluit6"); 11 } 12});
html5
1<div id="slctline"> 2 <div id="slctline1"><div th:fragment="sortAjaxBody"> 3 <div class="inline-block"> 4 <select name="sortitem"> 5 <option value="">選択してください</option> 6 <option th:each="itm:${itmMap}" 7 th:value="${itm.value}" th:inline="text">[[${itm.key}]] 8 </option> 9 </select> 10 </div> 11 <div class="inline-block"> 12 <select name="sortcon" > 13 <option value="asc">昇順</option> 14 <option value="desc">降順</option> 15 </select> 16 </div></div> 17 </div> 18<!-- ここから --> 19 <div id="slctline2"><div th:replace="this :: sortAjaxBody"></div></div> 20 <div id="slctline3"><div th:replace="this :: sortAjaxBody"></div></div> 21 <div id="slctline4"><div th:replace="this :: sortAjaxBody"></div></div> 22 <div id="slctline5"><div th:replace="this :: sortAjaxBody"></div></div> 23 <div id="slctline6"><div th:replace="this :: sortAjaxBody"></div></div> 24<!-- ここまで --> 25</div>
javascript
1//ひとまずここでは 2//上記htmlからslctline2~6を削除したうえで、slctline2~6タグを作っています 3//itmMap のサイズがjs上で取得できず(うまくいかず)、コントローラからmapサイズを別途送っています 4 5var mapSize = /*[[${mpsiz}]]*/0; 6window.onload =function() { 7 for(var i = 2; i <= mapSize; i++) { 8 $('#slctline').append('<div id="abcdefgz"></div>'); 9 $('#abcdefgz').attr('id', 'slctline' + i); 10 } 11}
javascript
1//これは、ボタンを置いて 2//1クリック毎に上記slctline2~6タグに<div th:replace="this :: sortAjaxBody">を追記しています 3//mapSize分クリックすると、べた書きhtmlと同じコードになります 4 5$("#button").on('click', function() { 6 for(i = 2; i <= mapSize; i++) { 7 var $line = document.getElementById("slctline" + i); 8 if (!$line.hasChildNodes()) { 9 $line.insertAdjacentHTML('beforeend', '<div th:replace="this :: sortAjaxBody"></div>'); 10 break; 11 } 12 } 13});
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/05/27 04:33