jqueryhtmlcustom-data-attributejquery-data

jquery get HTML 5 Data Attributes with hyphens and Case Sensitivity


How to get data attributes using jquery .data()? In which case html5 data-* attributes converts to lowercase and camelcase? What are all the main rules to follow while using custom attributes to store data?

<input type="button" class="myButton" value="click me" data-productId="abc"/>
<input type="button" class="myButton" value="click me" data-product-id="abc"/>
<input type="button" class="myButton" value="click me" data-PRODUCT-ID="abc"/>
<input type="button" class="myButton" value="click me" data-ProDUctId="abc"/>

Solution

  • HTML5 allows us to create our own custom attributes to store data. Custom attributes can be called anything we like, like variable names, but they need to be prepended with the word 'data', and words are separated by dashes. You could add "foo", "bar", and "foo bar" data attributes to an input like this:

    <input type="button" class="myButton" value="click me" data-foo="bar" 
    data-bar="baz" data-foo-bar="true">
    

    jQuery's .data() method will give you access to data-* attributes.

    Using jQuery up to and including version 1.4, data attributes were case insensitive, therefore:

    <input type="button" class="myButton" value="click me" data-productId="abc"/>
    

    would be accessible with

    $('.myButton').data('productId');
    

    jQuery 1.5 and 1.6

    However, changes in jQuery 1.5 and 1.6 mean that data attributes are now forced to lowercase, so:

    <input type="button" class="myButton" value="click me" data-productId="abc"/>
    

    is only accessible with

    $('.myButton').data('productid');
    

    Any data-* attributes become properties of the element’s dataset object. The new property names are derived as follows:

    Notice that the original attribute name data-product-id has been converted to productId in the dataset object. The name conversion process must be accounted for when naming data-* attributes. Since the attribute names are converted to lowercase, it is best to avoid using uppercase letters. The following example shows how several attribute names translate to dataset properties.

    "data-productId"  translates to "productid"
    "data-product-id" translates to "productId"
    "data-PRODUCT-ID" translates to "productId"
    "data-ProDUctId"  translates to "productid"
    

    NOTE:

    Implementing custom attributes in HTML5 is not technically complex in itself, however the real difficulty is in choosing whether it is appropriate to use them in your own projects, and if so how to go about it efficiently. Finally, do remember that it’s still a little early to start using the dataset approach for functions your pages rely on, so be sure to provide an alternative for non-supporting browsers.

    DEMO