▽1
●
Cherenkov ●34ポイント ベストアンサー |
タグのとじ忘れとかがあるのかな。
あと、$("#test").append(m);の時点で#testが存在することが保証されていないのでお決まりの
$(function(){ document読み込み後に実行したい処理 });
が必要かと。
文字列でHTMLを組むのではなくDOMElement的(?)に組んだほうがわかりやすいと思います。
var m = $('<div>'); m.append($('<div>'));
これで↓が生成される。
<div><div></div></div>
括弧の対応がずれているのでこれでエラーなく動くとは思えません。コピペミスってませんか?
正しいコードの構造が分かりませんのでなんとも言えませんが、変数をウォッチしてみるといいかもしれませんね。
たとえば
var list = ['a', 'b', 'c']; $.each(list, function(i, item) { var max_length = item.length; console.log(i,max_length) }) //実行結果(itemは配列ではない) //0 1 //1 1 //2 1
あるいは
var list = ['a', 'b', 'c']; var max_length = list.length; $.each(list, function(i, item) { console.log(i,max_length) }) //実行結果(iはmax_lengthとイコールにならない) //0 3 //1 3 //2 3
のようなことが起きているのでは。
実際のコードは、このままではないのかもしれませんが、確実におかしなところが二つあります。
$.each(list, function(i, item) { var max_length = item.length; var m = ''; // ※(1) if (i == 0) { [A処理] } [B処理] if (i == max_length) { // ※(2) [C処理] } });
※(1)
ループの中にしかスコープがありません。
なので、二回目 (i == 1) のループのときには、A処理でつけた は DIV は消えてしまいます。
※(2)
each のコールバックに渡される第一引数 (i) は、0始まりです。
つまり、最後のループでは i == max_length - 1 です。
修正したのがこちら。
var max_length = item.length; var m = ''; // ★(1) ループの外に出す $.each(list, function(i, item) { if (i == 0) { [A処理] } [B処理] if (i == max_length - 1) { // ★(2) max_length - 1 と比較 [C処理] } });
さらに、この順番で処理すれば良いのであれば、A処理、C処理は、ループの中に入れる必要はないと思います。
var max_length = item.length; var m = ''; // ★(1) ループの外に出す [A処理] $.each(list, function(i, item) { [B処理] }); [C処理]
実物と見比べてみてください。