2

I am trying to set a data attribute to a div which previously doesn't have any value.

<div></div>

with jQuery, the first method (data) doesn't do anything, however the attr method works correctly.

var div = $('div');
div.data('superhero_one','batman');
div.attr('data-superhero_two','spiderman');

http://jsfiddle.net/5bT8p/

Am I using incorrectly the data function?

4 Answers 4

5

It does work !

The actual thing behind that is , you can't see actual attribute when you use .data() because jquery sets that internally. but .attr() adds an attribute to the element which you can inspect.

see this demo --> http://jsfiddle.net/5bT8p/1/

Sign up to request clarification or add additional context in comments.

4 Comments

So in order to see it "externally" I can only use attr()?
@Alvaro Yes. But, Why you would need to see that "externally"
I am using skrollr, and although it is made to apply data attributes directly in html, I want to control them with javascript before applying init in the plugin. Thanks
Me too .data() is not work, but if I used for .attr() it works.
3
$("div").data("superhero_two","spiderman");

is the right syntax. But when inspecting, I'm only seeing data-superhero_two="spiderman" (as intended). The attribute from .attr is set in the DOM, and the .data is set in the JQuery object only.

By the way, use the document ready function to ensure its execution at the right time:

$(document).ready(function() {
    $("div").data("superhero_two","spiderman");
});

Comments

1
$("div").data("superhero_two","spiderman");

I suggest you give .data() | jQuery API Documentation a read. You'll find plenty of examples there to set and get data attributes.

Here is an in use example of the same on jsfiddle : http://jsfiddle.net/yrshaikh/293nk/1/

2 Comments

I gave it a read, and this doesn't do what it should. At least Chrome is not showing the div changed at all. Only using attr()
As others said, it works as jQuery object,but doesnt reflect it in the DOM. Thanks :)
1

Is working fine, because they have different behaviours, jQuery.data:

Store arbitrary data associated with the matched elements or return the value at the named data store for the first element in the set of matched elements.

so your element will not have any html attribute set, but the key-value pair is stored inside the jQuery object reference.

In short the difference is $.data is used for storing information without any alteration on the DOM element, attr is used to manipulate attributes of an element.

Demo: http://jsfiddle.net/5bT8p/3/

2 Comments

Then I misunderstood how it works, I should use attr() to actually apply the data right? Thanks
It depends, if you want to manipulate DOM attribute use attr (I think is your case), if you want to store data use, data; added in the answer

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.