Loại bỏ, thay thế và chuyển động các phần tử trong jQuery. Kéo và thả các phần tử (kéo và thả)
Bài học này giải quyết các vấn đề về thao tác các yếu tố hiện có trên trang:
- Loại bỏ Các phần tử từ trang bằng các phương thức trống () , tẨY () , tách ra () và unrap ()
- Thay thế các yếu tố với các yếu tố mới bằng cách sử dụng các phương thức thay bằng () và tHAY THẾ TẤT CẢ ()
- Di chuyển. các phần tử từ phần tử cha khác này sang yếu tố khác trên trang
Xóa các phần tử khỏi trang
Xóa mọi thứ bên trong phần tử: trống ()
Phương thức trống () là cách đơn giản nhất để xóa nội dung khỏi trang. Gọi phương thức trống () cho đối tượng jQuery sẽ loại bỏ tất cả các nội dung khỏi bộ tương ứng với phần tử (hoặc vật phẩm) trong đối tượng jQuery.
Nói cách khác, phương thức trống () xóa tất cả các yếu tố di truyền và các nút (như các nút văn bản) từ mỗi phần tử rơi vào bộ, để trống phần tử.
Ví dụ loại bỏ nội dung của hai yếu tố div:
Đoạn văn với văn bản
Một đoạn văn khác với văn bản
Sau khi hoàn tất mã trên, nội dung trang sẽ thay đổi thành:
Xóa toàn bộ phần tử: Xóa ()
Nếu phương thức trống () sẽ xóa mọi thứ bên trong phần tử, thì phương thức Remove () sẽ xóa mọi thứ, bao gồm cả chính phần tử. Ví dụ:
Đoạn văn với văn bản
Một đoạn văn khác với văn bản
Nút văn bản như nó làsau khi hoàn tất mã trên, cả hai phần tử div sẽ bị xóa khỏi trang:
Bạn có thể chuyển chuỗi bằng bộ chọn có điều kiện đến phương thức Remove (). Trong trường hợp này, các mục đã xóa sẽ được chọn bởi bộ chọn. Ví dụ:
Đoạn văn với văn bản
Một đoạn văn khác với văn bản
Nút văn bản như nó làTrong ví dụ trên, chỉ phần tử div sẽ bị xóa mà lớp Xóa được cài đặt. và Chứa văn bản "đoạn khác". Mọi thứ khác sẽ vẫn còn trên trang:
Đoạn văn với văn bản
Xóa một mục mà không phá hủy dữ liệu của nó: Detach ()
Xóa () Trả về đối tượng jQuery, chứa các phần tử từ xa. Về mặt lý thuyết, bạn có thể xóa bất kỳ mục nào từ một nơi trên trang và sau đó tham gia cùng chúng ở bất cứ đâu ..
Tuy nhiên, để tiết kiệm tài nguyên và tránh một vấn đề tiềm ẩn với rò rỉ bộ nhớ, phương thức Remove () sẽ xóa tất cả dữ liệu và sự kiện jQuery được liên kết với phần tử từ xa. Ví dụ: nếu sự kiện JQuery Click được gán một phần tử, sau đó, mục đã bị xóa khỏi trang bằng phương thức Xóa, sự kiện nhấp sẽ bị xóa khỏi mục. Điều này có thể gây ra sự cố nếu sau này bạn muốn trả lại hàng Quay lại trang và khôi phục chức năng của nó.
Trong trường hợp này, phương thức Detach () có thể giúp (xuất hiện trong jQuery 1.4). Nó hoạt động gần như phương thức Remove (), ngoại trừ một - anh ta không xóa Dữ liệu và sự kiện jQuery được liên kết với một phần tử từ xa. Điều này có nghĩa là sau này bạn có thể gắn lại các mục từ xa trong khi duy trì siêu dữ liệu jQuery của họ.
Thí dụ. Tập lệnh sau gán cho sự kiện JQuery Click cho mỗi hai đoạn trên trang. Cả hai trình xử lý sự kiện chỉ cần chuyển đổi lớp CSS "màu đỏ" sang đoạn để thay đổi màu từ màu đỏ trên Đen hoặc Quay lại mỗi lần nhấn.
Script sau đó xóa đoạn đầu tiên khỏi trang bằng phương thức Remove () và lưu trữ đối tượng jQuery, trong đó chứa một đoạn trong biến MyDIV1PARA. Sau đó đính kèm đoạn văn vào DIV cha mẹ bằng phương thức appendto ().
Chúng tôi cũng làm tương tự với đoạn thứ hai, chỉ sử dụng phương thức Detach () thay vì phương thức Remove ().
<
Đoạn văn với văn bản
Một đoạn văn khác với văn bản
Sau khi thực hiện tập lệnh này, đoạn đầu tiên sẽ mất trình xử lý sự kiện nhấp chuột và đoạn thứ hai sẽ giữ lại đầy đủ chức năng của nó. Bạn có thể kiểm tra bằng cách mở trang trong trình duyệt. Nếu bạn nhấn nút chuột trên đoạn thứ hai, nó sẽ thay đổi màu sắc và đầu tiên sẽ không phản ứng với các hành động của chuột.
Điều này là do phương thức Remove () đã dẫn đến việc xóa một trình xử lý sự kiện cho đoạn đầu tiên và phương thức tách () đã lưu trình xử lý sự kiện nhấp vào đoạn thứ hai.
Xóa phần tử cha: unrap ()
Phương thức Unwrap () sẽ xóa phần tử cha (hoặc phụ huynh của bộ phần tử) khỏi DOM. Phần tử sẽ thay thế phần tử cha trong DOM.
Ví dụ sau mở ra nội dung của div. Một từ khác được thay thế bằng div nội dung của nó:
Đoạn văn với văn bản
Một đoạn văn khác với văn bản
Sau khi thực hiện đoạn mã trên, nội dung trang sẽ lấy mẫu sau:
Đoạn văn với văn bản
Một đoạn văn khác với văn bản
Thay thế các yếu tố
Thay thế phần tử bằng nội dung mới: thay thế ()
Phương thức thay thế () cho phép bạn thay thế vật phẩm hoặc tập hợp các phần tử bằng nội dung mới. Bạn có thể truyền đạt nội dung thay thế trong bất kỳ hình thức nào sau đây:
- Yếu tố đối tượngđược tạo bằng chức năng JavaScript DOM, chẳng hạn như tài liệu.GelementById () hoặc document.createase ()
- Chuỗi htmlđại diện cho nội dung thay thế
- Đối tượng jQuerychứa một phần tử (hoặc các phần tử) được sử dụng để thay thế
- Chức năng trở vềMà phải trả về mã HTML thay thế
Dưới đây là một ví dụ hiển thị phương thức thay thếWith () trong hành động. Đoạn đầu tiên được thay thế bằng chuỗi HTML mới, đoạn thứ hai được thay thế bằng đối tượng của phần tử và đoạn thứ ba được thay thế bằng kết quả của hàm trả về thời gian hiện tại:
Đoạn văn với văn bản
Đoạn văn với văn bản
Đoạn văn với văn bản
Sau khi thực hiện mã, nội dung của trang sẽ lấy mẫu:
Đoạn mới với văn bản
Giờ hiện tại: 13:52:17
Thay thếL (): thay thế để thay thế ()
Phương thức thay thếL () thực hiện một cách nghiêm túc của dịch vụ mà phương thức thay thếWith () là, thay vì gửi nội dung thay thế dưới dạng đối số, bạn cần chuyển mục sẽ phải được thay thế.
Ví dụ: 2 dòng mã sau đây làm cho cùng một điều:
$ ("# mydiv"). Thay thế ("
Đây là một văn bản mới
"); $("Đây là một văn bản mới
") .replacealll (" # mydiv ");Các yếu tố di chuyển.
Bây giờ bạn biết cách xóa và thay thế các mục. Câu hỏi vẫn mở: Làm thế nào để di chuyển các mục trên cây DOM? Ví dụ: có một đoạn trong phần tử div và bạn cần di chuyển nó sang một div khác.
Mặc dù thực tế là trong jQuery thì không có phương pháp đặc biệt nào để di chuyển các yếu tố gỗ DOM, trong thực tế, nó rất dễ thực hiện. Tất cả những gì bạn cần làm là làm nổi bật các phần tử mà bạn muốn di chuyển; Sau đó gọi phương thức "bổ sung", ví dụ: append (), appendto () hoặc updend () để thêm một mục chuyên dụng cho một yếu tố cha mẹ khác. JQuery tự động nhận ra rằng (các) phần tử đã tồn tại trên trang và di chuyển nó đến một phụ huynh mới.
Một ví dụ tái tạo quy trình được mô tả. Đoạn văn di chuyển từ đầu tiên div. Trong giai đoạn thứ hai:
Đoạn văn với văn bản
Sau khi mã được thực thi, trang sẽ lấy mẫu sau:
Đoạn văn với văn bản
Và đây là một cách khác để di chuyển yếu tố:
// di chuyển đoạn từ # mydiv1 sang # mydiv2 $ ("# mydiv1\u003e p"). Appendto ($ ("# mydiv2")); // thấm vào đoạn từ # mydiv1 in # mydiv2 var para \u003d $ ("# mydiv1\u003e p"); Para.prependto ("# mydiv2"); // di chuyển đoạn văn từ # mydiv1 in # mydiv2 // sử dụng sự ngắt kết nối rõ ràng của nó và thêm nó vào một địa điểm mới $ ("# mydiv1\u003e p"). Tách (). Exptendo ("# mydiv2");
Một ví dụ chứng minh một kỹ thuật jQuery rất hữu ích - sự ràng buộc của các phương thức. Vì hầu hết các phương thức jQuery trả về các đối tượng, bạn có thể gọi một phương thức khác cho đối tượng được trả về. Những gì lần lượt sẽ dẫn đến sự trở lại của đối tượng jQuery tiếp theo, v.v.
Vì vậy, trong ví dụ trên, đối tượng jQuery được trả về bằng phương thức tách (), được gọi để xóa đoạn văn. Và phương thức PREPENDTO () được gọi cho đối tượng trả về jQuery để thêm đoạn từ xa vào phần tử cha mẹ mới.
Điều gì xảy ra nếu bạn cố gắng di chuyển bất kỳ nội dung nào trong nhiều yếu tố cha mẹ cùng một lúc? Nếu bạn thực hiện, trước tiên, jQuery sẽ xóa nội dung khỏi cha mẹ cũ, sau đó sao chép nội dung nhiều lần khi bạn cần và thêm các bản sao vào từng yếu tố cha đã chỉ định. Ví dụ:
Đoạn văn với văn bản
Sau khi hoàn tất đoạn mã trên, nội dung của trang sẽ trông như thế này:
Đoạn văn với văn bản
Đoạn văn với văn bản
Tóm lược
Loại bỏ, thay thế và dịch chuyển nội dung là những khái niệm cơ bản cho phép bạn xây dựng các trang web dựa trên jQuery tuyệt vời.
Một chương khác từ cuốn sách "jQuery trong hành động" (tác giả của gấu bibeawult và yehuda katz). Trước hết, tôi xin lỗi những người đọc trong một khoảng thời gian rộng lớn như vậy giữa các ấn phẩm của chương. Nhưng vẫn vậy, tôi đã làm điều đó, tất nhiên, rất vui. Tôi hy vọng rằng bạn sẽ không thờ ơ quá. Vì vậy, chúng tôi bán.
Chương 3. Thu hút một trang với jQuery.
3.1. Thao tác các thuộc tính và thuộc tính của các đối tượng.
3.1.1. Thao tác với tính chất đối tượng.
Cách dễ nhất để kiểm tra hoặc thay đổi các mục của bộ JUE được chọn bởi chúng tôi cho phép chúng tôi chỉ huy mỗi (): $ ('Img'). Mỗi (hàm (n) (
this.alt \u003d 'Hình ảnh này [' + n + '] với id bằng' + this.id;
});
Biểu thức này sẽ áp dụng chức năng được chỉ định cho từng phần tử. Trên trang, thuộc tính Alt sẽ được thay đổi bằng cách sử dụng số thứ tự của mục và ID của nó.
3.1.2, 3.1.3 Lấy và thay đổi các giá trị thuộc tính.
Như chúng ta đảm bảo, nhiều phương thức trong jQuery được sử dụng để đọc và ghi, tùy thuộc vào các thuộc tính và số lượng của chúng được truyền theo phương thức.Do đó, phương thức Attr () có thể được sử dụng cả để nhận giá trị của các thuộc tính và để cài đặt của chúng. Nếu chỉ có tên thuộc tính được truyền, nó sẽ trả về giá trị của nó, ví dụ:
$ ("# MyImage"). Attr ("alt")
Vì vậy, chúng tôi nhận được ALT cho một phần tử có ID #MyImage.
$ ("# MyImage"). Attr ("alt", "MU Picture")
Như bạn có thể đoán, hãy cài đặt cùng một phần tử Alt "Ảnh của tôi".
Điều đáng chú ý là thay vì giá trị thuộc tính mới, bạn có thể truyền hàm vào phương thức này. Thí dụ:
$ ('*'). Atr (tiêu đề ', hàm (chỉ mục) (
Trả về 'Tôi là phần tử' + Chỉ mục + 'và tên của tôi là' +
(this.Id? cái này: 'không đặt');
});
Sự phức tạp này trong khi đối với chúng tôi, chức năng chạy qua tất cả các phần tử của quay số trên trang bằng cách thay đổi thuộc tính tiêu đề theo chỉ mục phần tử và ID của nó.
Hơn nữa, phương thức Attr () cho phép bạn thay đổi nhiều thuộc tính cùng một lúc:
$ ('Đầu vào'). Atr ((giá trị: '', tiêu đề: 'Vui lòng nhập giá trị'));
Theo cách này, chúng ta có thể xóa tất cả các giá trị đầu vào và cài đặt tiêu đề của chúng là "Vui lòng nhập giá trị".
3.1.4 Xóa các thuộc tính.
Để xóa thuộc tính tại phần tử DOM, trong jQuery, có một phương thức DROPEATTR () đặc biệt. Ví dụ:$ ('Img'). Loại bỏ ('alt');
Vì vậy, chúng tôi xóa thuộc tính Alt từ tất cả các yếu tố IMG đã chọn.
3.2 Làm việc với các kiểu yếu tố.
3.2.1 Thêm và xóa tên lớp.
Định nghĩa của lớp được thực hiện rất đơn giản bằng cách sử dụng phương thức add class (), gán tên của lớp cho tất cả các phần tử trong tập hợp. Ví dụ:$ ('Img'). Add class ('noborder');
Xóa một lớp được thực hiện bởi lệnh RemoveClass ():
$ ('Img'). Broweclass ('NOBORDER');
Phương pháp sau đây khá thú vị: toggleclass () gán một phần tử lớp trong một tập hợp, nếu lớp này chưa được xác định cho nó, và, ngược lại, hãy loại bỏ lớp của phần tử trong tập hợp, nếu lớp đã được gán .
Nó rất hữu ích để áp dụng một phương thức như vậy trong các bảng, ở đâu, giả sử, chúng ta cần thay đổi các dòng sơn màu trắng và trắng - trong sơn. Điều này được thực hiện như thế này:
$ ('Tr'). Toggleclass ('sọc');
Trong đó sọc là tên của lớp cho chuỗi sơn.
3.2.2 Bắt và lắp đặt kiểu.
Làm việc trực tiếp với phong cách mang lại cho chúng ta những cơ hội tuyệt vời.Phương thức CSS () hoạt động tương tự như phương thức attr (), cho phép chúng ta đặt các thuộc tính riêng lẻ của CSS cho phần tử bằng cách chuyển phương thức thành một cặp giá trị tên hoặc thậm chí thay đổi nhiều thuộc tính bằng cách truyền các giá trị mới cho chúng trong đối tượng.
Hơn nữa, phương pháp này cũng xử lý hoàn hảo các hàm được truyền đến nó dưới dạng giá trị cho thuộc tính. Ví dụ: chúng ta sẽ tăng chiều rộng của các phần tử trong một bộ 20 pixel:
$ ('Div.expandable'). CSS ('chiều rộng', hàm () (
Trả lại $ (cái này) .width () + 20 + "px";
});
Ví dụ sau đây cho thấy khả năng chuyển phương thức nhóm tham số dưới dạng các đối tượng:
$ ('Div.example'). CSS ((chiều rộng: '100px', Chiều cao: '200px'));
Và cuối cùng, phương thức CSS () cho phép bạn lấy giá trị của tài sản được truyền theo phương thức. Ví dụ: bạn có thể tìm hiểu độ rộng của phần tử như thế này:
$ ('Div.examle'). CSS ('chiều rộng');
Đối với các thuộc tính được sử dụng thường xuyên trong jQuery có các lệnh đặc biệt. Vì vậy, chúng ta có thể học hoặc thay đổi chiều cao và chiều rộng của các đối tượng với các phương thức Chiều cao () và Chiều rộng (). Theo đó, nếu chúng tôi truyền phương thức giá trị - chúng tôi đặt giá trị này theo phương thức nhận được và nếu chúng tôi chỉ cần gọi phương thức - chúng tôi có được giá trị bạn cần (trong khi giá trị được truyền sẽ được cài đặt tính bằng pixel), đó là:
$ ('Div.example'). Chiều rộng (500)
Đặt chiều rộng của khối trong 500 pixel. Nhân tiện, điều này giống như
$ ('Div.example'). CSS ("Chiều rộng", "500px")
Bây giờ bạn có thể tìm ra chiều rộng khối như thế này:
$ ('Div.example'). Chiều rộng ()
3.2.3 Một số đội hữu ích hơn để làm việc với phong cách.
Đôi khi cần phải kiểm tra xem nó thuộc về một lớp cụ thể hay không. Làm cho nó sẽ giúp hàm HasClass ():$ ('P: đầu tiên'). HasClass ('Supriseme')
Nếu bất kỳ phần tử nào trong bộ thuộc về lớp được chỉ định, hàm sẽ trả về TRUE.
3.3 Đặt nội dung của các mục.
3.3.1 Thay thế HTML hoặc văn bản.
Lệnh đơn giản nhất là HTML () - Trả về cho chúng tôi mã HTML của phần tử tương ứng đầu tiên nếu tham số không được chỉ định hoặc cài đặt một đoạn HTML, được truyền dưới dạng tham số có chứa bởi tất cả các mục đã chọn.Ngoài ra, có thể chỉ có được nội dung văn bản của các yếu tố. Đối với điều này có một lệnh text ().
- Số ba.
- Bốn.
Var text \u003d $ ("# thelist '). Văn bản ();
Do đó, biến văn bản sẽ chứa chuỗi "onetwothreefour".
Như với tính năng trước đó, chúng ta có thể đặt nội dung văn bản cho phần tử nếu các hàm Test () sẽ là văn bản tham số cần thiết. Trong trường hợp này, nếu văn bản có nhân vật< или > Chúng sẽ được thay thế bằng đặc biệt.
Điều đáng chú ý là việc sử dụng hai lệnh này để đặt nội dung của các mục sẽ xóa nội dung trước đó, vì vậy hãy sử dụng các lệnh này một cách cẩn thận.
3.3.2 Di chuyển và sao chép các yếu tố.
Để thêm nội dung vào cuối lệnh append () hiện tại phục vụ.Chức năng thêm một chuỗi hoặc một đoạn HTML được truyền đến nó dưới dạng tham số cho phần tử DOM mới hoặc hiện có hoặc tập hợp các phần tử jQuery lồng nhau. Xem xét một số ví dụ.
$ ("P"). Nối (" một số tiếp theo");
Biểu thức này sẽ đính kèm một đoạn HTML được tạo từ hàm chuỗi được truyền, vào cuối nội dung đã có sẵn của tất cả các mục
Trên trang.
Việc sử dụng toàn diện hơn của lệnh này cho phép bạn gán các phần tử DOM hiện có cho các phần tử khác. I E:
$ ("P.appendtome"). Appendme ($ ("a.appendme"))
Cho phép bạn gán tất cả các liên kết của lớp appendme bởi các yếu tố công ty con của tất cả
Ở bên cạnh lớp appendtome. Trong trường hợp này, vị trí cuối cùng của các yếu tố được gán phụ thuộc vào số lượng phần tử mục tiêu. Nếu đó, thì các mục có thể gán sẽ được di chuyển từ vị trí ban đầu của chúng trên trang, nếu các thành phần đích là nhiều, thì các mục được chỉ định sẽ vẫn ở vị trí riêng của chúng và các yếu tố mục tiêu sẽ được gán cho bản sao của chúng.
Để di chuyển hoặc sao chép một phần tử từ nơi này sang nơi khác, bạn cũng có thể sử dụng lệnh appendto (), di chuyển tất cả các phần tử của quay số lồng vào cuối nội dung của phần tử mục tiêu được chỉ định làm tham số chức năng. Chúng tôi tìm một ví dụ để xem sự khác biệt từ hàm trước:
$ ("A.appendme"). Appendto ($ ("p.appendtome"))
Là một mục tiêu, một lần nữa, cả bộ chọn và phần tử DOM có thể xuất hiện. Như trong hàm trước, nếu phần tử đích là một, thì chuyển động sẽ được thực hiện nếu các đối tượng mục tiêu là một số, sau đó sao chép sẽ được thực hiện.
Nguyên tắc hoạt động của các đội sau tương tự như công việc của Append () và AppendTo ():
Chuẩn bị () và erpendto () - chèn phần tử nguồn trước mục tiêu, và không sau đó.
Trước () và Chèn Before () - Chèn một phần tử vào các phần tử mục tiêu và không phải trước hậu duệ đầu tiên.
Sau () và chèn sau () - chèn một phần tử sau các phần tử đích và không sau hậu duệ cuối cùng.
Hãy xem xét ví dụ sau:
$(‘
Chào!
') .IntertAfter (' p img ');Biểu thức này sẽ tạo một đoạn mới và chèn các bản sao sau mỗi bản vẽ bên trong đoạn văn.
3.3.3 Các yếu tố đầu tư
Một loại thao tác DOM khác, mà chúng ta thường đề cập đến việc nhúng này các phần tử (hoặc nhóm các phần tử) cho một số yếu tố khác. Ví dụ: chúng tôi muốn đặt tất cả các tham chiếu của một lớp nhất định bên trong$ ("A.surprise"). Bọc ("
”);$ ("A.surprise"). Gói ($ ("DIV: đầu tiên"));
Phải làm gì nếu chúng ta cần đặt tất cả các mục đã chọn chứ không phải từng cái một, nhưng cùng nhau trong một số thùng chứa chung? Điều này sẽ giúp hàm Wrapall ().
Chà, khi chúng ta muốn đặt một thùng chứa trong thùng chứa, bạn cần, không phải mọi yếu tố, mà chỉ có nội dung của nó - sử dụng hàm WrapInner ().
3.3.4 Loại bỏ các yếu tố
Nếu chúng ta muốn xóa hoặc xóa một tập hợp các phần tử, bạn dễ thực hiện với lệnh Remove (), loại bỏ tất cả các phần tử của bộ được nhúng từ DOM trên trang.Cần lưu ý rằng, giống như nhiều lệnh jQuery khác, kết quả của lệnh này một lần nữa là một tập hợp các phần tử. Và hãy để chúng tôi loại bỏ nó khỏi DOM, chúng tôi vẫn có thể sử dụng nó thêm trong các chức năng khác, ví dụ, cùng một phần mềm () hoặc chèn sau () hoặc tương tự khác.
Để xóa các mục khỏi nội dung của chúng, bạn có thể sử dụng lệnh rỗng (). Nó loại bỏ nội dung của tất cả các phần tử DOM trong bộ.
Việc sử dụng Remove () và sau () được phân phối cho hoạt động thay thế. Điều này được thực hiện theo cách này:
$ ('Div.elementtoreplace'). Sau ('
Tôi thay thế khối
') .Tẩy ();Kể từ sau () trả về phần tử nguồn
Nếu bạn thích ý tưởng, bạn có thể tinh chỉnh nó và viết chức năng sau:
$ .fn.replacewith \u003d hàm (html) (
Trả lại cái này. Sau đó (html) .remove ();
}
Sau đó, chúng tôi sẽ thực hiện các hoạt động trước đó:
$ ('Div.elementtoreplace'). Thay thế ('
Tôi thay thế khối
’);Và phải làm gì khi chúng ta muốn không di chuyển các yếu tố, mà chỉ sao chép? ..
3.3.5 Các yếu tố nhân bản
Để làm điều này, bạn có một lệnh clone () trong jQuery. Nó tạo và trả về một bản sao của bộ. Tất cả các mục và hậu duệ được sao chép. Với tham số TRUE được truyền, tất cả các trình xử lý cũng được sao chép.Các yếu tố nhân bản là không hiệu quả cho đến khi chúng ta làm một cái gì đó với một bản sao. Tất cả phụ thuộc vào tưởng tượng của chúng tôi. Đây là một vài ví dụ:
$ ('Img'). Clone (). Appendto ('fieldset .photo');
Biểu thức này tạo một bản sao của tất cả các hình ảnh và đặt chúng trong tất cả các yếu tố.