2010-01-29 28 views
161

Tôi đang sử dụng jQuery.append() để thêm một số yếu tố động. Có cách nào để có được một bộ sưu tập jQuery hoặc mảng của các yếu tố mới được chèn vào này?jQuery append() - trả về các phần tử được nối thêm

Vì vậy, tôi muốn làm điều này:

$("#myDiv").append(newHtml); 
var newElementsAppended = // answer to the question I'm asking 
newElementsAppended.effects("highlight", {}, 2000); 
+3

bản sao có thể có của [Cách dễ dàng hơn để lấy đối tượng jQuery từ phần tử được nối thêm] (http://stackoverflow.com/questions/1443233/easier-way-to-get-a-jquery-object-from-appended-element) – bluish

Trả lời

225

Có một cách đơn giản hơn để làm điều này:

$(newHtml).appendTo('#myDiv').effects(...); 

này biến những thứ xung quanh bằng cách đầu tiên tạo newHtml với jQuery(html [, ownerDocument ]), và sau đó sử dụng appendTo(target) (lưu ý "To" bit) để thêm nó vào cuối #mydiv.

Bởi vì bây giờ bạn bắt đầu với $(newHtml) kết quả cuối cùng của appendTo('#myDiv') là bit mới của html và .effects(...) cuộc gọi sẽ được rằng mới chút html quá.

+3

Tôi nghĩ rằng tôi thực sự sử dụng 'appendTo' và' prependTo' nhiều hơn tôi từng sử dụng 'append' và' prepend'. –

+2

Sử dụng jQuery UI phiên bản 1.9.2 Tôi nhận được 'hiệu ứng' không phải là chức năng ... nhưng' effect'is –

+0

hoạt động tuyệt vời để tự động thêm các phần tử qua AJAX và đính kèm .data() vào chúng: D –

24
var newElementsAppended = $(newHtml).appendTo("#myDiv"); 
newElementsAppended.effects("highlight", {}, 2000); 
36
// wrap it in jQuery, now it's a collection 
var $elements = $(someHTML); 

// append to the DOM 
$("#myDiv").append($elements); 

// do stuff, using the initial reference 
$elements.effects("highlight", {}, 2000); 
+2

Điều này không hiệu quả đối với tôi khi sau này tôi cố gắng ràng buộc một sự kiện với phần tử được nối thêm. Tôi đã sử dụng var appendedTarget = $ (newHtml) .appendTo (phần tử). Sau đó tôi có thể ràng buộc bằng cách sử dụng $ (appendedTarget) .bind ('keydown', someFunc) –

+0

Tôi nghĩ rằng đó là '$ elements.effect (" highlight ", {}, 2000);', không phải 'hiệu ứng'. – why

+2

Điều này không hoạt động vì biến phần tử $ sau khi được nối, thay đổi và không còn khả dụng nữa. –

8

Một lời nhắc nhở chút, khi yếu tố được thêm tự động, các chức năng như append(), appendTo(), prepend() hoặc prependTo() trả về một đối tượng jQuery, không phải là phần tử HTML DOM.

DEMO

var container=$("div.container").get(0), 
    htmlA="<div class=children>A</div>", 
    htmlB="<div class=children>B</div>"; 

// jQuery object 
alert($(container).append(htmlA)); // outputs "[object Object]" 

// HTML DOM element 
alert($(container).append(htmlB).get(0)); // outputs "[object HTMLDivElement]" 
+15

Phần tử trả về từ append() là vùng chứa chứ không phải phần tử mới. – Tomas

0

Tôi nghĩ rằng bạn có thể làm một cái gì đó như thế này:

var $child = $("#parentId").append("<div></div>").children("div:last-child"); 

CáC#parentId mẹ được trả về từ các append, vì vậy thêm một truy vấn con jquery với nó để có được cuối cùng div con chèn vào.

$ con sau đó là div con bọc jquery được thêm vào.

Các vấn đề liên quan