- ベストアンサー
DOMへの追加方法について
- DOMへの追加方法を知りたい
- 特定の要素にdtタグを追加する方法を教えてください
- 英語の文字列を基準にdtタグを追加したい
- みんなの回答 (5)
- 専門家の回答
質問者が選んだベストアンサー
#2, 3 です。 > Aから始まるの後に、AAA, AAB と並ぶようにしたいです AAA, AAB の順でソートされる実装になっていると思うのですが、期待通りに動かないHTMLを開示できるでしょうか。 ■JavaScriptの問題点 #2 で述べたように基本的には JavaScript で実装しない方が良い案件に思えましたが、この辺りはどうでしょうか。 Re: yukiponta さん
その他の回答 (4)
- think49
- ベストアンサー率59% (285/482)
#3 です。 id 初期化が漏れていたので修正しました。 https://jsfiddle.net/gohva2rm/1/ Re: yukiponta さん
- think49
- ベストアンサー率59% (285/482)
ASCIIコード順に並んでいますが、順序保証あるのでしょうか。 汎用性を踏まえると事前にソートするのが良さそうですが…。 https://jsfiddle.net/gohva2rm/ ```html <dl id="hoge"> <dd>222</dd> <dd>AAA</dd> <dd>BBB</dd> <dd>CCD</dd> <dd>333</dd> <dd>BBC</dd> <dd>AAB</dd> <dd>CCC</dd> </dl> <script> 'use strict'; (function (sortfn) { var doc = document, dd = doc.querySelectorAll('#hoge>dd'), dt = doc.createElement('dt'), df = doc.createDocumentFragment(), parentNode = dd[0].parentNode; dd = Array.prototype.slice.call(dd).sort(sortfn); // 配列化してASCIIコード順にソートする dt.appendChild(doc.createTextNode('dummy')); // dt 要素ノードの雛形 for (var i = 0, l = dd.length, target, firstChar, beforeChar; i < l; ++i) { target = dd[i]; firstChar = target.firstChild.data[0]; if (/^\d$/.test(firstChar)) { firstChar = '数字'; } if (firstChar !== beforeChar) { dt = dt.cloneNode(true); dt.firstChild.data = firstChar + 'から始まる'; df.appendChild(dt); df.appendChild(target); beforeChar = firstChar; } else { df.appendChild(target); } } parentNode.appendChild(df); }(function sortfn (a, b) { return a.firstChild.data > b.firstChild.data; })); </script> ``` 実際のところ、JavaScriptが無効化されれば実行されないので他の手段も検討する余地があるかもしれません。 - サーバサイドでdd要素を出力しているのならサーバサイドで <dt>***から始まる</dt> - 静的HTMLでdt要素を挿入する手間を惜しむのならJavaScriptで生成した後に静的HTMLとして貼り付ける Re: yukiponta さん
- babu_baboo
- ベストアンサー率51% (268/525)
#1です。まちがえた return /\d+/.test (t) ? '数値': t; return /\d/.test (t) ? '数値': t; for (var idx, t = null, i = 0; c = cs[i]; i++) for (var idx=0, t = null, i = 0; c = cs[i]; i++) 癖は治らず
- babu_baboo
- ベストアンサー率51% (268/525)
どうしてもjQueryが必要ですか? 必要ならば他の誰かにお任せします。 function firstCharType (e) { var t = e.textContent.charAt (0); return /\d+/.test (t) ? '数値': t; } function appendDT (e, c, i) { var dt = e.ownerDocument.createElement ('dt'); dt.textContent = c + 'から始まる'; dt.id = 'list' + i; e.parentNode.insertBefore (dt, e); } var dd = Array.prototype.slice.call (document.querySelectorAll ('#hoge dd')); var cs = dd.map (firstCharType); for (var idx, t = null, i = 0; c = cs[i]; i++) if (c !== t) appendDT (dd[i], c, idx++), t = c;
補足
ご回答いただきありがとうございます。 順序保証はjsでソートできるので問題なかったのですが、対応していただきありがとうございます。 今AAAとAABの上にそれぞれAからはじまるというdtが記載されていますが、 Aから始まるの後に、 AAA AAB と並ぶようにしたいです。 こちら再度お願いできませんでしょうか。