jQuery将data-*属性转换为较低的camel case属性

sup*_*cal 3 javascript jquery html5

我有以下jQuery脚本来初始化一个名为poshytips的jQuery插件.我想使用Html5数据属性配置插件.我正在重复自己的大时间,任何人都可以想出一个更好的方法吗?

$('.poshytip-trigger').each(function (index) {
    var $this = $(this);
    var data = $this.data();

    var options = {};

    if (data['class-name']) {
        options.className = data['class-name'];
    }

    if (data['align-x']) {
        options.alignX = data['align-x'];
    }

    if (data['align-y']) {
        options.alignY = data['align-y'];
    }

    if (data['offset-y']) {
        options.offsetY = data['offset-y'];
    }

    if (data['offset-x']) {
        options.offsetX = data['offset-x'];
    }

    $this.poshytip(options);
});
Run Code Online (Sandbox Code Playgroud)

Sel*_*gam 5

我会使用for..in循环来读取data-*标签.此外,你不需要camelcase,因为jQuery在内部将它转换为camelCase ... 源代码参考.

$('.poshytip-trigger').each(function (index) {
    var $this = $(this);
    var data = $this.data();
    var options = {};

    for (var keys in data) {
        options[keys] = data[keys];            
    }

    // For older versions of jQuery you can use $.camelCase function
    for (var keys in data) {
        options[$.camelCase(keys)] = data[keys];
    }

});
Run Code Online (Sandbox Code Playgroud)

DEMO

对于jQuery 1.4.4,

$('.poshytip-trigger').each(function(index) {
    var $this = $(this);
    var data = $this.data();
    var options = {};

    for (var keys in data) {
        options[camelCase(keys)] = data[keys];
    }
});

//copied from http://james.padolsey.com/jquery/#v=git&fn=jQuery.camelCase
function camelCase(str) {
    return str.replace(/^-ms-/, "ms-").replace(/-([a-z]|[0-9])/ig, function(all, letter) {
        return (letter + "").toUpperCase();
    });
}
Run Code Online (Sandbox Code Playgroud)

DEMO为1.4.4