Last Updated: February 25, 2016
·
2.436K
· dmtrs

jquery.data() does not manipulate the dom

or Why you should not (be careful) use data attribute in selectors.

While I was working with the $().data()</code> function of the jquery library, me and my colleague @smas realized that data is not actually manipulating the DOM but stores the changes in the $.cache</code>. That actually can stop you from using data attribute in a selector, because you wont get the proper results.

For example, oen your browsers console and address the following code:

$('body').append("<div id='test' data-id='15' ></div");
$('#test').data('id'); //Returns 15
$('#test').data('id', 20); 
$('#test').data('id'); //Returns 20
//Now if you try to use data as selector
$('div[data-id=20]'); //Nothing will be returned
$('div[data-id=15]'); // Will get you the "proper" element

$('div[data-id=15]').data('id'); //Will return 20 :)

This acutally can be found in the jquery 1.6.3 release changelog ( under Better handling of HTML5 data attribute names ).

Remember, however, that the $().data() API only reads the HTML5 data- attributes initially, and does not keep subsequent data changes in sync with attributes for performance reasons. To update the actual attributes in the HTML markup, use .attr().

2 Responses
Add your response

Thanks for the helpful clarification!

over 1 year ago ·
over 1 year ago ·

Have a fresh tip? Share with Coderwall community!

Post
Post a tip
Did you know?

JavaScript on a page runs with the privileges of that origin. One altered library, tag manager, or snippet can read inputs, change what people see, and call your APIs as the user.

Security insights from Cside