2014-12-15 4 views
0

동적으로 html을 생성하려면 (템플릿 라이브러리를 사용하지 않고) 두 가지 옵션이 있습니다. 다음 중 호감을 보인 이유는 무엇입니까?jQuery로 HTML 요소 생성

var cars = [{"id": 1, "name": "volvo"}, 
      {"id": 2, "name": "nissan"}, 
      {"id": 3, "name": "audi"}]; 
for (i = 0; i < cars.length; i++){ 

    //Option one 
    var html = "<li data-id="+cars[i].id+"><a>"+cars[i].name+"</a></li>"; 
    $('#result-one').append(html); 

    //Option two  
    var $el = $('<li/>',{ 
     'data-id' : cars[i].id 
    }).append(
     $('<a/>',{ 
      text : cars[i].name 
     }) 
    );  
    $('#result-two').append($el); 
} 

http://jsfiddle.net/joepegler/xk4fumgz/3/

+2

대신 템플릿 엔진을 사용해보십시오. – SLaks

+3

jquery는 라이브러리입니다. – DoctorMick

+0

@ DoctorMick, OP가 이미 jQuery를 포함 할 계획이라면 아마도 * 추가 ​​* 라이브러리를 의미 할 것입니다. 여전히 유용 할 때 단일 라이브러리 이상을 포함하도록 웹 사이트를 확장 할 가치가 있습니다. – KyleMit

답변

1

성능을 위해이 더 좋은 방법이 될 것입니다 :

var cars = [{"id": 1, "name": "volvo"}, 
      {"id": 2, "name": "nissan"}, 
      {"id": 3, "name": "audi"}]; 
var html = ""; 
for (i = 0; i < cars.length; i++){ 

    var html += "<li data-id="+cars[i].id+"><a>"+cars[i].name+"</a></li>"; 

} 

$('#result-one').append(html); 

이 방법 당신은 한 번만 추가. 더 많은 공연자에게 더 적은 것을 붙이면됩니다.

http://code.tutsplus.com/tutorials/10-ways-to-instantly-increase-your-jquery-performance--net-5551 팁 # 7.

+0

이 두 답변은 둘 모두 옵션 1보다 우수하지만 그렇지 않으면 제안합니다. 더 나쁜 성능을 내면 왜 옵션 2를 사용합니까? http : // stackoverflow.com/questions/11173589/best-way-to-create-nested-html-jquery와 함께 http://stackoverflow.com/questions/867916/creating-a-div-element-in-jquery –

+1

사람들이 성능보다는 코드 가독성에 대한 우려 나는 당신이 DOM에 많은 요소를 가지고 있고 강렬한 DOM 조작을하지 않는다면 그 차이가 의미있는 것이라고 생각하지 않습니다. 개인적으로, 나는 HTML 방식으로 사용하고 그것은 나를 위해 더 읽기 쉽습니다. 습관과 선호에 관한 질문 일뿐입니다. –

-1

그냥이없는 이유 :

편집

또는 더 나은 :

var items = ''; 
for (i = 0; i < cars.length; i++){ 
    items += '<li data-id="'+cars[i].id+'"><a>'+cars[i].name+'</a></li>'; 
} 
$('#result-two')[0].innerHTML = items; 

이, 그것을 입력하기 쉽고 더 확대됨에 있기 때문에이 - 그것의 $('#el').html() 및보다 빠름 210,뿐만 아니라. jsperf

+0

왜 투표가 늦습니까? – Todd

+0

이 질문에 어떻게 대답합니까? 그것은 결코 html'

  • volvo
  • '을 생성하지 않습니다. 어려움은 배열에서 HTML로 특정 정보를 주입하는 것이 었습니다. – KyleMit

    +0

    @KyleMit 왜 이렇게하지 않습니까? 그것은 나의 첫 번째의 수정 된 부분입니다. – Todd

    1

    라이브러리 사용에도 불구하고 라이브러리를 사용하지 않도록하십시오!

    var cars = [ 
         { 
          id:1, 
          name:'volvo' 
         }, 
         { 
          id:2, 
          name:'nissan' 
         }, 
         { 
          id:3, 
          name:'audi' 
         } 
        ], 
        result = document.getElementById('result-two'), 
        mainLi = document.createElement('li'), 
        mainA = document.createElement('a'), 
        setText(function(){ 
         if('textContent' in document){ 
          return function(el,text){ 
           el.textContent = text; 
          }; 
         } else if('innerText' in document){ 
          return function(el,text){ 
           el.innerText = text; 
          }; 
         } else { 
          return function(el,text){ 
           el.innerHTML = text; 
          }; 
         } 
        })(); 
    
    for (var i = 0, len = cars.length; i < len; i++){ 
        var li = mainLi.cloneNode(false), 
         a = mainA.cloneNode(false); 
    
        li.setAttribute('data-id',cars[i].id); 
        setText(a,cars[i].name); 
    
        li.appendChild(a);  
        result.appendChild(li); 
    } 
    

    그리고, 복사 및 붙여 넣기 할 경우 : 새 노드의 id을 변경 것이지만, 깊은 복사를 수행

    var copy = result.cloneNode(true); 
    

    . 안된다.하지만 도대체 ... 재미 있었다. 그래도 작동해야하고 요소를 손으로 쓰지 않는 좋은 이점이 있습니다. (당신이 불렀을 때) 초기 "템플릿"노드를 만든 다음 필요한 경우이를 복제 한 다음 적절한 속성/텍스트를 적용합니다. 매우 명확하고, 우연히 매우 빠르게 진행됩니다. :)