2010-04-26 4 views
0

menuOrder 빈 DIVjQuery를 내가 최소한의 반복으로 변경하는 방법,

$("#menuOrder").append('<table>'); 

$(menus).each(function(i, menu) { 
    $("#menuOrder").append('<tr><td>'); 
    $("#menuOrder").append(menu.text); 
    $("#menuOrder").append('</td><td>'); 

    if (i > 0) { 
    $("#menuOrder").append('<img src="/images/_images/up.png" />'); 
    } else { 
    $("#menuOrder").append('<img src="/images/_images/blank.png" />'); 
    } 

    if (i < menus.length - 1) { 
    $("#menuOrder").append('<img src="/images/_images/down.png" />'); 
    } 

    $("#menuOrder").append('</td>'); 
    $("#menuOrder").append('</tr>'); 
}); 

$("#menuOrder").append('</table>'); 

이 코드가 제대로 작동하지 않습니다 테이블 구축? 이 같은 일을

+2

그것은 가능하면 HTML로 문자열을 구축하고 내가 그것을 할 수있는 방법을 –

+0

를 추가하는 대신,이 같은으로 .Append을 많이하지 않도록하는 것이 좋습니다입니까? – kusanagi

답변

4

봅니다 :

var rows = []; 
$(menus).each(function(i, menu) { 
var row = '<tr><td>'.menu.text.'</td><td>'; 

    if (i > 0) { 
     row +='<img src="/images/_images/up.png" />'; 
    } 
    else { 
     row +='<img src="/images/_images/blank.png" />'; 
    } 

    if (i < menus.length - 1) { 
     row +='<img src="/images/_images/down.png" />'; 
    } 

    row += '</td></tr>'; 
    rows.push(row); 
}); 
$('<table></table>').append(rows.join('')).appendTo('#menuOrder'); 

이 각 행의 HTML을 포함하는 문자열로 rows 배열을 채 웁니다. 모든 행을 만들면 테이블 요소의 jQuery 객체를 만들고 모든 행을 그 행에 추가합니다. 그런 다음 표를 #menuOrder에 추가합니다. append()으로이 작업을 수행 할 수없는

+0

나는 또한 모든 행을 한 번에 추가하여 단일 문자열에 html을 저장하는 것이 더 낫다는 것을 언급하고자한다. 일부 브라우저는 테이블의 내부 HTML 부분을 조작하는 동안 문제가 있습니다. – vittore

1

참고 :

$("#menuOrder").append('</table>'); 

대신 함께 HTML 문자열의 조각을 아교, 당신이 완료 DOM 노드의 관점에서 생각해야합니다. append() 유효한 인수의 예 :

.append($('.something')) 
.append(document.createElement('div')) 
.append('<div />') // automatically creates empty div element 
.append('<tr><td></td></tr>') // automatically creates tr with td inside 
관련 문제