2016-04-15 22 views
16

Tôi có mã ES6 này, sau khi tôi biên dịch mã này với Babel thành ES5, gọi số this bên trong số gọi .each trở thành undefined. Làm sao để giải quyết vấn đề này?Hàm jQuery .each() với các hàm mũi tên ES6

let mediaBoxes = $(".now-thumbnail"); 
let titles = []; 
mediaBoxes.each(() => { 
     let obj = { 
       index: i, 
       title: $(this).find(".now-thumbnail-bottomtext").text().trim() 
      }; 
    titles.push(obj); 
}); 

Trả lời

23

Giải pháp của tôi là không sử dụng this, nhưng sử dụng các biến được chuyển đến hàm gọi lại. Cái đầu tiên là chỉ mục và cái thứ hai cung cấp cho bạn chính phần tử DOM.

let mediaBoxes = $(".now-thumbnail"); 
let titles = []; 
mediaBoxes.each((index, element) => { 
       let obj = { 
        index: index, 
        title: $(element).find(".now-thumbnail-bottomtext").text().trim() 
       }; 
       titles.push(obj); 
}); 
19

Đó là bởi vì giá trị trung bình của this là không giống nhau trong các chức năng mũi tên.

this

chức năng mũi tên nắm bắt được giá trị này của bối cảnh kèm theo,

Chức năng each() qua các yếu tố như là đối số thứ hai để gọi lại.

Nhưng một giải pháp thích hợp hơn cho bạn sẽ cũng sử dụng .map() thay vì each()

let mediaBoxes = $(".now-thumbnail"); 
let titles = mediaBoxes.map((i, el) => { 
    return { 
    index: i, 
    title: $(el).find(".now-thumbnail-bottomtext").text().trim() 
    }; 
}).get(); 
+0

Tôi đã suy nghĩ giống nhau. 'let titles = $ ('. now-thumbnail'). Bản đồ ((index, element) => ({ index: index, title: $ (element) .find (". now-thumbnail-bottomtext "). text(). trim() })) get(); ' – Tushar

+0

@Tushar nếu nội dung quá lớn thì tôi muốn chia nó thành một khối –

+2

Tôi cũng thêm rằng _không cần các chức năng mũi tên ở đây chỉ cho cú pháp ngắn gọn và không có gì được trả lại. Các hàm ẩn danh có thể được sử dụng trong đó '$ (this)' sẽ trỏ tới phần tử đúng_. – Tushar

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