2013-10-22 15 views
8

Tôi đang cố gắng thay đổi thuộc tính dữ liệu, nhưng nó dường như không bao giờ bị thay đổi và vẫn là "TEXT", là mặc định.thay đổi thuộc tính dữ liệu không hoạt động

function SuccessGetActorsForGroupCallback(data, el) { 
    var str = ""; 
    jQuery.each(data, function (i, val) { 
     str += val + '<br />'; 
    }); 

    $(el).data('original-title', str); 
    Utilities.ApplyTooltips($(el)); 
} 

Xin giúp

+2

Phương thức ['.data'] (http://api.jquery.com/data) không thay đổi thuộc tính HTML của dữ liệu'; nó thay đổi một biến mà jQuery lưu trữ nội bộ. – Blazemonger

+0

Không có đủ thông tin để trả lời câu hỏi này. Utilities.ApplyTooltips làm gì? Đánh dấu trông như thế nào? – Joe

+0

Ngữ cảnh nhiều hơn một chút sẽ hữu ích. 'Dữ liệu' trông như thế nào và' ApplyTooltips' làm gì? –

Trả lời

32

Phương pháp .data không làm thay đổi các thuộc tính data- HTML; nó thay đổi một biến mà jQuery lưu trữ nội bộ.

Nếu bạn thực sự cần/muốn thay đổi thuộc tính data-, làm như vậy một cách rõ ràng với phương pháp .attr():

$(el).attr('data-original-title', str); 

Tuy nhiên, này sẽ không làm thay đổi giá trị trả về bởi .data. jQuery sẽ tìm nạp giá trị đó từ thuộc tính HTML data- HTML chỉ khi nó không thể tìm thấy giá trị được lưu trữ nội bộ. Nếu bạn truy xuất lại $(el).data('original-title') sau khi thay đổi thuộc tính HTML, bạn sẽ thấy nó không thay đổi.

Nếu điều này là một vấn đề, hãy sử dụng phương pháp .removeData() để xóa giá trị được lưu trữ nội bộ. Lần sau khi bạn sử dụng .data(), jQuery sẽ thấy rằng nó bị thiếu và truy xuất thuộc tính HTML data-.

Hãy xem: http://jsfiddle.net/mblase75/LHCUK/


HTML:

<p id="p" data-title="blah"></p> 

jQuery:

console.log($('#p').data('title')); // returns "blah" 

// alter the attribute directly 
$('#p').attr('data-title','whooo'); // data-title="whooo" 
// test if .data is changed 
console.log($('#p').data('title')); // still returns "blah" 

// delete the .data() value 
$('#p').removeData('title'); 
// now fetch it again -- it will retrieve the new data- attribute 
console.log($('#p').data('title')); // returns "whooo" 

Bây giờ, trong thực tế, bạn không nên phải lo lắng về điều này. Chỉ cần nhớ rằng thuộc tính data- thể hiện giá trị ban đầu của biến số .data() và không nhất thiết là giá trị hiện tại của biến đó và bạn sẽ ổn.

Nói tóm lại: Phương pháp .data() lấy một giá trị từ các phần tử HTML lần khi tài liệu được nạp, và sẽ không làm như vậy một lần nữa chừng nào biến được lưu trữ nội bộ.

+3

Điều này đã lưu tôi khỏi đập máy tính của tôi ... – skirato

2

Mã của bạn: $(el).data('original-title', str);
nên là: $(el).attr('data-original-title', str);

.attr(); được sử dụng để thay đổi các thuộc tính nếu được sử dụng trong khóa - cặp giá trị.

Documentation here

+3

mà có thể cần phải là 'dữ liệu-bản gốc-tiêu đề' – Joe

+0

Tôi về cơ bản đặt ở đó, những gì ông đã chỉ định, tôi nghĩ rằng điểm là rõ ràng đủ tho. Tuy nhiên tôi đã chỉnh sửa câu trả lời của tôi, cảm ơn cho tip! – SidOfc

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