2012-08-29 2 views
2

Почему следующий код (1) не дает мне следующий результат (2)Как создать список HTML с помощью JQuery

(1)

var $ul = $('<ul>'); 
var $li = $('<li>').text('text'); 
$ul.append($li); 
$ul.append($li); 
$ul.append($li); 
$('<div>').append($ul); 

(2)

<div> 
    <ul> 
    <li> text <li> 
    <li> text <li> 
    <li> text <li> 
    </ul> 
</div> 
+4

Вы Добавляя же Ли снова и снова и снова, а не создавать новую. –

+0

Зачем? Вы ничего не делаете с создаваемым HTML, даже если вы не добавляли тот же элемент списка. Кроме того, когда вы спрашиваете, лучше всего описывать поведение, которое вы * видите, чтобы еще проще ответить на вопрос. –

+0

Здесь есть много разных ответов. Некоторые из них предлагают различные методы создания новых элементов. Вот длинная дискуссия о том, что делать и почему: http://stackoverflow.com/questions/327047/what-is-the-most-efficient-way-to-create-html-elements-using-jquery –

ответ

0

Попробуйте

$("<div/>") 
    .append(
     $("<ul/>") 
      .append(
       $("<li/>") 
        .text(" text ") 
     ) 
      .append(
       $("<li/>") 
        .text(" text ") 
     ) 
      .append(
       $("<li/>") 
        .text(" text ") 
     ) 
    ); 

Когда вы добавите же $li несколько раз вы просто двигаете его вокруг. Вам нужно создать новый для каждого добавления.

1

Вы добавляете один и тот же li снова и снова, а не создаете новый.

Я предлагаю вместо этого создать строку html и добавить ее все сразу.

var strHTML = "<div><ul>"; 
strHTML += "<li>text</li>"; 
strHTML += "<li>text</li>"; 
strHTML += "<li>text</li>"; 
strHTML += "</ul></div>"; 
var elements = $(strHTML); 

//OR in jQuery 1.8.0+  
//var elements = $.parseHTML(strHTML); 

Кроме того, вы всегда должны пройти comlete HTML в $(), что означает $("<li />") вместо $("<li>") иначе позже при обновлении JQuery вы будете иметь много работы, чтобы сделать.

1

Использование клона.

$li.clone().appendTo('ul'); 
1

Вы можете использовать clone() метод.

var $ul = $('</ul>'); 
var $li = $('</li>', {text:'text'}); 
$ul.append($li.clone()); 
$ul.append($li.clone()); 
$ul.append($li.clone()); 
$('<div/>').append($ul) 
0

Вы можете использовать время цикла:

var i = 1; 

while (i <= 3){ 
    $('ul').append('<li>Text</li>'); 
    i=i+1; 
} 
0
var $ul = $('<ul />'); 

for (i=0; i<3; i++) { 
    $ul.append($('<li />', {text : 'text'})); 
} 

$('<div>').append($ul); 
Смежные вопросы