日期:2014-05-16  浏览次数:20332 次

求js的封装问题,dataset
<input name="birthdate" class="datepicker" data-defaultdate="-20y" readonly="readonly"/>


$(".datepicker").each(function(){
      var param = {
     autoSize : true,
changeMonth : true,
changeYear : true,
     dateFormat : "yy-mm-dd"
      };
      if (this.dataset && this.dataset.defaultdate)
      param.defaultDate = this.dataset.defaultdate;
      else
      param.minDate = 1;
      $(this).datepicker(param);
    });



代码如上,data-defaultdate="-20y" 的值使用this.dataset.defaultdate 的值来获得,请问这是什么语法,this.dataset 是什么意思呀??

非常感谢!!!

------解决方案--------------------
这个 datepicker 是 jqueryui 里的一个组件吧。。
他应该把传过来的 data值付给了这个 jquery个体。
所以 data-xxx="nnn" 这种值应该都能以 this.dataset.xxx 得到相应的值。
当然,应该也可以通过 this.data('xxx') 来得到。
以上是我的猜测,具体的还请楼下来解答,或者直接看 jqueryui的代码。。
------解决方案--------------------
(1)dataset是HTML5中为html元素添加的一个新属性,这个属性的值是一个对象(该对象是html元素通过‘data-’方式添加的属性名及属性值的集合)。
比如你提到的input:

<input name="birthdate" class="datepicker" data-defaultdate="-20y" readonly="readonly"/>
//接下来取一下input.dataset并验证
var ele=document.getElementsByTagName('input')[0],
    obj=ele.dateset;
    console.log(typeof obj);//浏览器控制台显示结果为:object
    console.log(obj);//浏览器控制台显示结果为:{defaultdate: "-20y"}

再回到你的例子中,'if (this.dataset && this.dataset.defaultdate)'的用法就很简答明了了,同理如果input标签中还有其他的data-name=value,在js中都可以通过this.dataset.name来获取value。

(2)不过通过dataset获取到的对象并不是js传统意义上的对象,它在HTML5中的名称是DomStringMap,它有许多有用且有意思的特性,但是它的兼容性不太好,楼主可以自行google一下。
------解决方案--------------------
引用:
html5的标准有没有官方文档啊??