Return to Video

Creating elements from scratch (Video Version)

  • 0:01 - 0:07
    OK, cho đến hiện tại chúng ta đã chỉnh sửa rất nhiều phần tử trên trang web.
  • 0:07 - 0:10
    Nhưng nếu ta muốn thêm phần tử mới vào trang thì sao?
  • 0:10 - 0:15
    Ta có thể thực hiện điều đó với `innerHTML`, viết HTML cho những tag
  • 0:15 - 0:19
    bên trong chuỗi mà ta đưa vào, như ở đây.
  • 0:19 - 0:22
    Dù vậy nhưng có thể sẽ khá lộn xộn đấy, đặc biệt khi ta muốn tạo
  • 0:22 - 0:26
    nhiều tag với những thuộc tính, style, và class khác nhau.
  • 0:26 - 0:31
    Thay vì thế, ta có thể sử dụng nguyên một bộ thủ tục document
  • 0:31 - 0:35
    để tạo phần tử mới toanh và thêm vào trang web.
  • 0:35 - 0:41
    Giả sử ta muốn thêm một ảnh mèo vào trang,
  • 0:41 - 0:44
    vì ta nghĩ rằng vẫn hơi ít ảnh.
  • 0:44 - 0:49
    Bước đầu tiên là tạo phần tử mới ``, đúng không?
  • 0:49 - 0:51
    Ta phải tạo phần tử đó.
  • 0:51 - 0:56
    Ta sẽ bắt đầu bằng cách tạo một biến để lưu trữ phần tử, `catEI`.
  • 0:56 - 1:01
    Sau đó ta sẽ sử dụng `document.createElement`,
  • 1:01 - 1:07
    và đưa vào tên tag đang tạo, `img`.
  • 1:07 - 1:12
    Các bạn có thể tưởng tượng trình duyệt đã tạo một tag image, như thế này,
  • 1:12 - 1:15
    và nó đang lang thang ở đâu đó.
  • 1:15 - 1:19
    Bước tiếp theo là gán nguồn cho phần tử.
  • 1:19 - 1:23
    Vậy là, `catEI.src =`,
  • 1:23 - 1:29
    và ta chỉ việc lấy nguồn ở trên đây,
  • 1:29 - 1:35
    và—úi, ta nên thâm cả `alt` nữa, để giúp hình ảnh dễ truy cập hơn—
  • 1:35 - 1:42
    tôi quên mất đấy, lúc nào ta cũng nên có tag `alt` cho hình ảnh.
  • 1:42 - 1:47
    Bây giờ các bạn có thể hình dung tag `` mà ta vừa tạo
  • 1:47 - 1:58
    có một `src`, và cả một `alt`, “Photo of cute cat”.
  • 1:58 - 2:05
    OK, đây là những gì ta vừa tạo bằng JavaScript.
  • 2:05 - 2:09
    Tag `` vẫn đang lang thang đâu đó,
  • 2:09 - 2:12
    vì ta vẫn chưa lệnh cho trình duyệt phải đặt ở vị trí nào.
  • 2:12 - 2:16
    Ta có thể đặt tag ở rất nhiều vị trí khác nhau trong DOM.
  • 2:16 - 2:21
    Ta làm cái đơn giản nhất thôi nhé, hiển thị nó ở cuối trang là được.
  • 2:21 - 2:26
    Ta có thể thực hiện điều đó bằng cách dán vào cuối tag ``, như vậy ta nhập:
  • 2:26 - 2:30
    `document.body.appendChild(catEl);`
  • 2:30 - 2:31
    Haha—nó đây rồi!
  • 2:31 - 2:33
    Ảnh hơi to.
  • 2:33 - 2:35
    Mèo to khủng khiếp—sợ quá.
  • 2:35 - 2:41
    Bây giờ ta có thể gọi `appendChild` trên bất kỳ nốt DOM sẵn có nào trên trang web,
  • 2:41 - 2:47
    và nó sẽ biến phần tử vừa đưa vào thành phần tử con cuối cùng của nốt đó.
  • 2:47 - 2:52
    Đó là lúc DOM được trực quan hóa dưới dạng hình cây.
  • 2:52 - 2:58
    Tag `` là một nốt trên cây đó, và có cả tá con cái,
  • 2:58 - 3:00
    ví dụ như `` và ``,
  • 3:00 - 3:04
    và cuối phần tử con đó ta lại thêm một phần tử con khác.
  • 3:04 - 3:09
    Như vậy ta sẽ thêm vào sau tag ``, ngay đây.
  • 3:09 - 3:13
    Với các thủ tục DOM, về mặt lý thuyết ta sẽ có thể gắn phần tử
  • 3:13 - 3:16
    vào bất cứ đâu trên cây DOM.
  • 3:16 - 3:19
    Ta sẽ đưa nó vào vị trí dễ thấy nhất.
  • 3:19 - 3:22
    Được rồi, cùng làm thêm một ví dụ nữa nhé.
  • 3:22 - 3:28
    Ta đã sử dụng `innerHTML` ở dưới đây, để đưa tag `` vào trong ``.
  • 3:28 - 3:31
    Thay vào đó, ta có thể sử dụng `createElement`.
  • 3:31 - 3:33
    [đang gõ]
  • 3:40 - 3:44
    Tôi gõ nhầm mất rồi, chính tả rất quan trọng đấy nhé.
  • 3:44 - 3:49
    Như vậy sẽ tạo một tag `` trống, lang thang đâu đó.
  • 3:49 - 3:52
    Vì vậy, trước hết ta sẽ thiết lập văn bản,
  • 3:52 - 3:57
    `strongEl.textContent = "cat";`.
  • 3:57 - 3:58
    Được chưa?
  • 3:58 - 4:02
    Ta có thể chọn thực hiện thao tác khác,
    55
    00:04:01,816 --> 00:04:04,581
    trong đó ta sẽ tạo `textNode`.
  • 4:05 - 4:09
    Nhiều nốt DOM trên cây DOM có thể chứa những loại nốt đặc biệt, các `textNode`,
  • 4:09 - 4:11
    làm nốt con.
  • 4:11 - 4:15
    Và những nốt ấy không phải là phần tử, nhưng vẫn là nốt trên cây DOM.
  • 4:15 - 4:18
    Trên thực tế ta gọi chúng là “nốt lá”, vì đó là
  • 4:18 - 4:20
    bộ phận sau chót trên cây.
  • 4:20 - 4:22
    [đang gõ]
  • 4:28 - 4:32
    Ta sẽ đưa vào văn bản, “cat”.
  • 4:32 - 4:34
    Khi sử dụng kỹ thuật này, tức là
  • 4:34 - 4:42
    ta đã tạo 2 nốt lang thang: một tag ``,
  • 4:42 - 4:47
    rồi đến `textNode` này, chỉ có nội dung là “cat”.
  • 4:47 - 4:50
    Và ta cần phải kết nối chúng với nhau.
  • 4:50 - 4:55
    Ta muốn `` là mẹ của “cat”.
  • 4:55 - 5:03
    Vì vậy ta sẽ nhập `strongEI.appendChild(strongText);`.
  • 5:03 - 5:12
    OK, vậy là ta đã có `` với “cat” bên trong,
  • 5:12 - 5:19
    và ta phải gắn vào vị trí theo ý muốn, vì nó vẫn đang lang thang đâu đó.
  • 5:19 - 5:25
    Ta đang ở trong vòng lặp `for` cho `nameEIs`, và mỗi `nameEIs`
  • 5:25 - 5:27
    là một vị trí ta cần gắn tag ``.
  • 5:27 - 5:35
    Ta có, `nameEIs[i].appendChild(strongEI);`.
  • 5:35 - 5:42
    Aha, giờ thì lại gấp đôi luôn, vì tôi vẫn để nguyên như cũ.
  • 5:42 - 5:47
    Ta đang gắn vào một tag `` đã có sẵn `` trong đó.
  • 5:47 - 5:52
    Ta có thể thay đổi dòng này thành `innerHTML` bằng chuỗi trống,
  • 5:52 - 5:58
    từ đó dọn sạch span trước khi ta gắn vào nó.
  • 5:58 - 6:05
    Hiện tại, như các bạn thấy, ta đã tiết kiệm được nhiều dòng mã hơn hẳn so với phương pháp `innerHTML`.
  • 6:05 - 6:07
    Vậy tại sao ta lại làm thế?
  • 6:07 - 6:11
    Rất nhiều nhà phát triển không thích chỉnh sửa tài liệu theo cách này
  • 6:11 - 6:13
    vì nó rất tốn mã.
  • 6:13 - 6:17
    Hầu hết đều sử dụng những thư viện như jQuery,
  • 6:17 - 6:21
    để chỉnh sửa DOM, từ đó cung cấp các hàm
  • 6:21 - 6:27
    cùng chức năng nhưng ít mã hơn rất nhiều,
  • 6:27 - 6:29
    vì ta đang sử dụng các hàm library thay thế.
  • 6:29 - 6:33
    Tôi thích viết mã theo phương pháp này, vì tôi có thể
  • 6:33 - 6:39
    thấy chính xác mình đang chỉnh sửa cây DOM như thế nào, từng dòng một.
  • 6:39 - 6:43
    Và cảm giác gọn gàng hơn rất nhiều so với nhồi tất cả mọi thứ vào một chuỗi innerHTML.
  • 6:43 - 6:45
    Nhưng có thể các bạn lại không thích.
  • 6:45 - 6:47
    Dù sao thì ta cũng biết nó có tồn tại.
  • 6:47 - 6:51
    Vì vậy các bạn có thể áp dụng nếu cần thiết, và có thể hiểu được
  • 6:51 - 0:00
    chức năng thực sự của những thư viện như jQuery.
Title:
Creating elements from scratch (Video Version)
Description:

more » « less
Video Language:
English
Duration:
06:56

Vietnamese subtitles

Incomplete

Revisions