2012-10-10 2 views
5

Vòng lặp này (xem jsfiddle) cố gắng thêm một thẻ <span> vào vùng chứa năm lần. Nhưng nó chỉ làm điều đó một lần. Tại sao?Tại sao điều này chỉ được nối thêm một lần?

var myArr = [0,1,2,3,4]; 
var $span= $('<span></span>'); 
for (var i = 0; i < (myArr.length); i++) { 
    $('.contain').append($span); 
} 
+0

Không chắc chắn tại sao nhưng nó hoạt động nếu bạn thay đổi dòng 2 cho 'var khoảng = " SPAN";'. – nickdos

+0

Thú vị, tôi đã thử nghiệm điều này trên mã của tôi (phức tạp hơn nhiều so với bản demo này) và đề xuất trong nhận xét ở trên hoạt động. ví dụ. nối thêm một chuỗi thay vì một đối tượng jQuery. Có bất kỳ khó khăn nào để nối thêm một chuỗi so với một đối tượng jQuery hay là thực hành không tốt? – brentonstrine

+0

Tôi sẽ sử dụng một chuỗi trong trường hợp này. jQuery đối tượng là tốt cho khi bạn đang xây dựng một yếu tố phức tạp dom programatically (trên nhiều dòng mã) hoặc nếu bạn đã sử dụng jQuery để có được một yếu tố dom từ trang đã được. – nickdos

Trả lời

7

Vấn đề là bạn đang thêm cùng một yếu tố nhiều lần.
Sử dụng clone để sao chép phần tử và sau đó append.

$('.contain').append($span.clone());

demo

Cập nhật:

Bằng cách này bạn có thể tùy chỉnh các yếu tố của bạn và sau đó sao chép nó với tất cả tài sản.

var $span = $('<span/>', { 
        'class': 'someClass otherClass', 
        'css': { 
         'background-color': '#FF0000' 
        } 
      }); 
for (var i = 0; i < (myArr.length); i++) { 
    $('.contain').append($span.clone()); 
} 

demo2

Update2: theo this nhận xét.

$('.contain').append('<span class="yourClass"/>');

+1

hoặc thậm chí đơn giản hơn '$ ('. Contains'). Chắp thêm ('');' và không có $ span var – Fresheyeball

+0

@Fresheyeball Tôi đồng ý trong trường hợp này, nhưng theo cách này, anh ta có thể tùy chỉnh '$ span' và nối nó với cùng một phong cách nhiều lần. –

+0

@RicardoLohmann là không thể nếu một chuỗi được nối thêm? Tôi không thể làm '.append ('')'? – brentonstrine