私は、任意の数のliとliの内部に任意の数のulを含むネストされたリストを持っています。ここで、すべてのliには2つの非表示の入力があります。IDと親のIDです。
<ul>
<li>
<input type="hidden" name="question[id][]" value="'. $sub['id'] .'" />
<input type="hidden" name="question[parent][]" value="'. $question['id'] .'" />
<ul>
<li>
<input type="hidden" name="question[id][]" value="'. $sub['id'] .'" />
<input type="hidden" name="question[parent][]" value="'. $question['id'] .'" />
</li>
</ul>
</li>
<li>
<input type="hidden" name="question[id][]" value="'. $sub['id'] .'" />
<input type="hidden" name="question[parent][]" value="'. $question['id'] .'" />
<ul>
<li>
<input type="hidden" name="question[id][]" value="'. $sub['id'] .'" />
<input type="hidden" name="question[parent][]" value="'. $question['id'] .'" />
</li>
</ul>
<ul>
<li>
<input type="hidden" name="question[id][]" value="'. $sub['id'] .'" />
<input type="hidden" name="question[parent][]" value="'. $question['id'] .'" />
</li>
</ul>
</li>
</ul>
ネストされたリストをソートするために jQuery sortable を使用していますが、それらをソートした後、サブリストの各項目に適切な親 ID を保存する必要があります。
理論的には、各サブ質問の親 ID は、2 番目に近い ul の最初の入力の値です。また、親 ul がない場合は、親 ID を 0 に設定したいと思います。どうすれば見つけられますか? これは私がこれまでに持っているものです:
$('#reorder_form').submit(function(){
$('li').each(function() {
$id = $(this).closest('ul').closest('li').find("input[name='question[id]']").val();
if(typeof($id) == 'undefined') $id=0;
$(this).find("input[name='question[parent]']").val($id);
});
});
各入力を 2 回ヒットしているため、これが各入力を適切にループする方法であるとは 100% 確信が持てません。おそらく、代わりにliをループする必要がありますか?