Perhaps I’m using $.data incorrectly.
Assigning the data:
var course_li = sprintf('<li class="draggable course">%s</li>', course["fields"]["name"]);
$(course_li).data('pk', course['pk']);
alert(course['pk']); // shows a correct value
alert($(course_li).data('pk')); // shows null. curious...
course_li is later appended to the DOM.
Moving the li to a different ul:
function moveToTerm(item, term) {
item.fadeOut(function() {
item.appendTo(term).fadeIn();
});
}
Trying to access the data later:
$.each($(term).children(".course"), function(index, course) {
var pk = $(course).data('pk');
// pk is undefined
courses.push(pk);
});
What am I doing wrong? I have confirmed that the course li on which I am setting the data is the same as the one on which I am looking for it. (Unless I’m messing that up by calling appendTo() on it?)
When you store the data:
you’re creating an element but not saving it, so it’s lost. Your alert test test the wrong value; it should be:
which is
null. Consider:This creates two different elements with source equal to
course_li, which are then promptly lost. What you need to do is create the element first, then work with that single element (i.e. don’t call$(course_li)more than once). For example,Note that
course_linow holds an element, rather than a string.