やりたいこと
- TeXでいうところの\label,\refみたいな数式番号をJavascriptで実装したい。
- 今回のサンプルでは、UL要素の入れ子の深さも加味した数式番号にしたい。
- ただし、条件として、兄弟要素間では通し番号をキープしておく。”いとこ要素”同士では例え同じ深さでも通し番号はリセットする。です。
現状、ここまで考えました:
- 数式番号を記載されるべき場所には、span要素を置いておく。
- こんな表記で:<span class="label" id="[1-2]" />
(1-2は、深さ1の2番目の数式番号という意味です。)
- 呼び出す側は、<span class="ref" title="fukasa2"></span>とし、
fukasa2という文字列を手がかりに、それに対応した数式番号をJavaScriptを使って引き出してくる。
- 数式番号に書くために準備したラベルとそのラベルに対応した数式番号はハッシュで覚えておく。
- 要素の探索には、jQueryを使いつつ、再帰関数を定義しています。
- 詳しくはサンプルコードを見て下さい。
問題点・要望
- サンプルコードが機能しない。
- JavascriptもしくはHTMLで私の要望を満たすようなもっと上手いやり方があれば教えて下さい。
追記
サンプルコードの場合の望むべき結果は、
<li>3 ここから<span class="ref" title="fukasa2">to be removed</span></li>
と書かれている部分について、
ここからto be removed
と出力されるのではなくて、
ここから(3-1)
と出力されることです。
サンプルコード
Javascript
1<script type="text/javascript"> 2 var hash_map_label = {}; 3 4 function checkLabelNode(node, depth, num){ 5 if(node == undefined){ 6 return; 7 } 8 var newDepth = depth; 9 var newNum = num; 10 if(node.prop("tagName") == "UL"){ 11 newDepth = newDepth+1; 12 } else if(node.prop("tagName") == "SPAN" && node.attr("class") == "label"){ 13 newNum = newNum+1; 14 hash_map_label[node.attr("id")] = "(" + newDepth + "-" + newNum + ")"; 15 node.replaceWith("it is ok."); 16 } 17 18 if(node.children() != undefined){ 19 checkLabelNode(node.children().first(), newDepth, newNum); 20 } 21 checkLabelNode(node.next(), newDepth, newNum); 22 23 return; 24 } 25 $(function(){ 26 checkLabelNode($('.functest').first(), 0, 0); 27 $("span.ref").each(function(index){ 28 $(this).replaceWith(hash_map_label[$(this).attr("title")]); 29 }); 30 }); 31</script> 32<div class="functest"> 33<ul> 34 <li>1</li> 35 <li>2<span class="label" id="sample" /> 36 <ul> 37 <li>1-1<span class="label" id="[1-1]" /></li> 38 <li>1-2<span class="label" id="[1-2]" /> 39 <ul> 40 <li>2-1</li> 41 <li>2-2</li> 42 <li>2-3<span class="label" id="fukasa2" /></li> 43 </ul> 44 </li> 45 <li>1-3</li> 46 <li>1-4 47 <ul> 48 <li>2-1<span class="label" id="2番目の深さ1" /></li> 49 <li>2-2</li> 50 <li>2-3<span class="label" id="2番目の深さ2" /></li> 51 </ul> 52 </li> 53 </ul> 54 </li> 55 <li>3 ここから<span class="ref" title="fukasa2">to be removed</span></li> 56</ul> 57</div>
回答6件
あなたの回答
tips
プレビュー