Hỏi về each trong jquery

Chào mọi người, em đang trong quá trình tìm hiểu về query và có viết 1 đoạn như dưới.

$(document).ready(function () {
    $('article.blog-post').each(function () {
      var get = $(this),
          title = $(".blog-post .entry-title-link"),
          version = $(".blog-post .post-excerpt__version"),
          mod = $(".blog-post .post-excerpt__mod"),
          getURL = get.attr('data-url');
      $.ajax({
        type: 'GET',
        url: getURL,
        cache: true,
        success: function (data) {
          var get_title = $(data).find('.file-name').text(),
              get_version = $(data).find('.version').text(),
              get_mod = $(data).find('.mod-features').text();
          title.html(get_title);
          version.html(get_version);
          mod.html(get_mod)
        }
      })
    });
  });

Code này dùng để lấy nội dung từ .file-name,.version,.mod-features trong bài viết để truy xuất ra ngoài trang chủ và gán vào .blog-post .entry-title-link… em làm nó chỉ gán nội dung cuối cùng của kết quả.
Mong các ac fix giúp e code này.
Link web

Vì bạn gán vào có 1 thẻ html mà các lần gán trước sẽ bị các lần gán sau ghi đè giá trị. Giá trị cuối cùng là kẻ chiến thắng.
each() là dạng “rút gọn” của for (foreach) đấy.

Mình thấy bạn biết dùng đến find() và cả $(this).
Giờ đến lúc “hợp nhất” cả 2 rồi đấy.

      var get = $(this),
          title = get.find(".entry-title-link"),
          // Tương tự cho cho version, mod...

Cái bạn cần gán là cho nội dung của thẻ hiện tại (this), bạn phải truy vấn từ this. Bạn dùng $() là truy vấn cho cả document, thế nó mới gán tất cả thành cùng 1 giá trị và bằng giá trị cuối cùng.

Mà cái getURL kìa là từ trang web khác hay của bạn vậy? Nếu là của bạn thì dùng JSON để giảm tải xử lý.:smiley:

4 Likes

Xem kĩ lại lần nữa bạn nhé.

5 Likes

em làm cả tuần rồi mà ko được a ạ. nên mới up lên đây

^
Xem kĩ lại lần nữa bạn nhé.
Đoạn mã mẫu của mình chỉ có 3 dòng thôi.

  1. Dòng có sẵn từ bạn
  2. Dòng bạn cần làm theo
  3. Chỉ là chú thích.
4 Likes

Em làm như a thì nó ko gán cho title được

Cụ thể là bị “nàm thao”? Đoạn mã bạn đã sửa đâu?
Chép mã rồi dán lên đây, khỏi chụp hình, tốn công, con chừng bị gắn cờ đấy.

3 Likes

ô thanks anh, em làm được rồi ^^
đúng là do em nhìn sai code :v

Có thể dùng json trong trường hợp này ko anh? e dùng nhưng nó ko xuất ra được
A có thể gợi ý cho e được ko ạ?

Dùng JSON:

  • Trang của bạn phải có url trả về JSON theo truy vấn của bạn (trả về mấy cái version…).
  • Trong xử lý Ajax, sự kiện success: function (data) không dùng cách truy vấn jQuery cho html nữa mà dùng đến JSON.parse(). Nếu dữ liệu đúng định dạng JSON thì giá trị trả về là một thực thể của Javascript.

Json:

{
    "title" : "XXX",
    "version" : "0.0.0.0",
    "mod" : "YYY, ZZZ"
}

Javascript:

        success: function (data) {
          var obj = JSON.parse(data);
          title.html(obj["title"]);
          // tương tự...
3 Likes

dữ liệu trả về của e là view-source của url thôi a

Túm lại là mấy cái url kia là từ trang web của bạn hay bạn lấy từ trang khác? Của người ta ấy?
Nếu từ trang khác thì vậy thôi.
Mình chỉ đưa ra ý tưởng nếu bạn lấy thông tin từ chính trang của bạn thì nên dùng JSON cho tối ưu.

4 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?