2016-03-18 14 views
5

Tôi đang phải vật lộn với những gì có lẽ là một chút rất đơn giản của jQueryLàm thế nào để truy cập vào thuộc tính dữ liệu sử dụng jQuery

Tôi có html như thế này:

<div class="star-rating" data-star-rating="5.0"></div> 
<div class="star-rating" data-star-rating="2.0"></div> 

Tôi có một số javascript mà cần phải làm điều gì đó dựa trên xếp hạng sao của từng yếu tố và hiện trông như thế này:

$('.star-rating').jRate({ 
    startColor : '#ccc', 
    endColor : '#ccc', 
    readOnly : true, 
    rating : <value of data-star-rating> 
}); 

tôi muốn thay thế <value of data-star-rating> với giá trị của các dữ liệu thuộc tính liên quan đến các yếu tố đang được xử lý

Tôi nghĩ điều này sẽ làm việc $(this).data('starRating') nhưng nó dường như không

Làm thế nào tôi có thể truy cập giá trị của thuộc tính dữ liệu trong tình huống này?

+0

Bạn đã thử '$ (this) .data ('xếp hạng sao')'? – j08691

+0

'console.log ((" xếp hạng sao "). Dữ liệu ('xếp hạng sao'))' trả lại là gì? Bạn thậm chí không lặp qua các yếu tố, mà một trong những nó sẽ nhận được? 5.0 hoặc 2.0? –

+0

@ksno nó trả về bất cứ điều gì đầu tiên là ... không thực sự có liên quan mặc dù – Edd

Trả lời

4

$(this) không đề cập đến các yếu tố mà hàm jRate đang được gọi.

Bạn có thể sử dụng bộ chọn nếu có chỉ là một yếu tố duy nhất có mà lớp

$('.star-rating').jRate({ 
    startColor : '#ccc', 
    endColor : '#ccc', 
    readOnly : true, 
    rating : $('.star-rating').data('star-rating') 
}); 

Đối với nhiều yếu tố:

lặp qua tất cả các yếu tố có lớp star-rating và đính kèm các plugin jRate riêng lẻ với giá trị rating của phần tử tương ứng.

$('.star-rating').each(function() { 
    $(this).jRate({ 
     startColor: '#ccc', 
     endColor: '#ccc', 
     readOnly: true, 
     rating: $(this).data('star-rating') 
    }); 
}); 

JSFiddle DemoKhông tìm thấy CDN liên kết của plugin đó, vì vậy bổ sung mã được rút gọn trong cửa sổ JavaScript tự

1

Bạn phải sử dụng này:

$(this).attr('data-star-rating'); 
+0

Điều đó không đúng về 'dữ liệu()'. Nó sẽ và trả về các thuộc tính dữ liệu HTML. – toomanyredirects

5

Bạn có thể sử dụng điều này quá:

$(this).data('star-rating'); 

EDIT

Sau khi đọc lại câu hỏi. Nhận xét là đúng, bạn nên lặp qua mảng .star-rating để áp dụng jRate cho từng phần tử, xin lỗi vì sự hiểu lầm của tôi.

$('.star-rating').each(function() {  
    $(this).jRate({ 
     startColor: '#ccc', 
     endColor: '#ccc', 
     readOnly: true, 
     rating: $(this).data('star-rating') 
    }); 
}); 
+0

Như của jQuery 1.4.3 HTML 5 dữ liệu thuộc tính sẽ được tự động kéo vào đối tượng dữ liệu của jQuery. Việc xử lý các thuộc tính với các dấu gạch ngang nhúng đã được thay đổi trong jQuery 1.6 để phù hợp với đặc tả HTML5 của W3C. – Pradeep

+1

Tôi không biết tại sao điều này có 5 upvotes vì ​​điều này không trả lời câu hỏi? Tại sao '$ (this) .data ('starRating');' không hoạt động như thế này là hoàn toàn hợp lệ. – Jai

+0

Chỉ cần nói, sau khi chỉnh sửa gần đây trông giống như [câu trả lời của tôi] (http://stackoverflow.com/a/36085321/2025923) – Tushar

2

Vì có nhiều hơn một yếu tố có lớp "sao giá" vì vậy bạn sẽ cần phải lặp qua các Elemets và foreach vòng lặp sẽ làm cho yếu tố iterating hiện truy cập vào vòng lặp, do đó bạn có thể sử dụng phần tử đó. Và áp dụng JRate.

$('.star-rating').forEach(function(dateRating){ 
    $(dateRating).jRate({ 
    startColor : '#ccc', 
    endColor : '#ccc', 
    readOnly : true, 
    rating : $(dateRating).attr("data-star-rating") 
}); 
}); 
+1

Mặc dù câu trả lời này có thể đúng và hữu ích, nó được ưu tiên hơn nếu bạn [đưa ra một số giải thích cùng với nó] (http://meta.stackexchange.com/q/114762/159034) để giải thích cách nó giúp giải quyết vấn đề. Điều này trở nên đặc biệt hữu ích trong tương lai, nếu có thay đổi (có thể không liên quan) khiến nó ngừng hoạt động và người dùng cần phải hiểu nó đã hoạt động như thế nào. Cảm ơn! – Hatchet

+0

Đã thêm một số mô tả. Tôi nghĩ rằng đây là mã chung chung để mọi người có thể hiểu được nếu sử dụng JavaScript và JQuery. – dsk

0

$(this).data('star-rating') sẽ làm việc nếu bạn quay lại nó từ một hàm.

$('.star-rating').jRate({ 
    startColor : '#ccc', 
    endColor : '#ccc', 
    readOnly : true, 
    rating : function() { return $(this).data('star-rating'); } 
}); 
Các vấn đề liên quan