Why jQuery .data() function is not accessing HTML5 camel-case data attribute -
i have button in web page:
<button class="slidetoggle" data-slidetoggle="slider">slidetoggle</button> when button clicked trying access data stored inside data-slidetoggle attribute useing following code, nothing.
$('body').on('click', '.slidetoggle', function(){ alert($(this).data('slidetoggle')); }); but works when use:
alert($(this).attr('data-slidetoggle')); this problem occurs when use camel-case data attribute. new html5 , jquery , can not figure out going wrong it.
all previous answers miss 1 thing: can work existing html structure. consider this:
$('body').on('click', '.slidetoggle', function(){ alert($(this).data('slidetoggle')); // wait, what? }); to understand happens here, it's crucial check following lines in jquery source code:
name = "data-" + key.replace( rmultidash, "-$1" ).tolowercase(); data = elem.getattribute( name ); see, jquery here follows convention of dataset api, converting foobar property data-foo-bar name of element's attribute.
in case, converts 'slidetoggle' 'data-slide-toggle' - , there's no such attribute in html, apparently.
however, data('slidetoggle') works fine, getattribute default performs case-insensitive search among element's attributes. therefore, might wrote 1 as...
<button data-slidetoggle="l33t!"></button> ... , still would have worked. )
still, i'd rather recommend following dataset api convention, breaking camelcased complexword data attributes hyphenated complex-word notation.
Comments
Post a Comment