动态分配数据角色属性

时间:2013-03-21 20:09:58

标签: javascript jquery-mobile

我想我可以在调用jQuery Mobile的JavaScript之前添加它:

$('section').data('role','page');
$('article').data('role','content');

这样我只需在HTML中使用<section><article>标记,而不是指定<div data-role="page"><div data-role="content">

但我不认为它有效。

4 个答案:

答案 0 :(得分:3)

你可以这样做:

$('section').attr('data-role','page');
$('article').attr('data-role','content');

答案 1 :(得分:1)

试试这个:

<强>头:

<script src="jquery.js"></script>
<script src="YOUR-SCRIPT.js"></script>
<script src="jquery-mobile.js"></script>

你的脚本JS:

$(document).bind("mobileinit", function(){
    $('section').data('role','page');
    $('article').data('role','content');
    /* OR */
    $('section').attr('data-role','page');
    $('article').attr('data-role','content');
});

参考:http://jquerymobile.com/demos/1.2.1/docs/api/globalconfig.html

答案 2 :(得分:1)

为什么需要“数据”属性? http://api.jquery.com/data/ 它们可能导致内存泄漏等问题。 jQuery已经有了一个内置的“数据”,它正在运行。它没有设置数据属性,它使用更好,更有效的方法来存储与DOM选择器相关的数据与JavaScript。

如果由于某种原因没有内置'data',你应该更新jQuery。这是一个垫片,大多数情况下你可以看到它是如何工作的。它不是一个完整的垫片,它只是一种使用数据键元素的选择器存储数据的一种非常简单的方法。我删除元素时不删除数据,因此我的实现可能会导致内存泄漏。不过,这只是一个例子。

if ($(window).data === undefined) {
    $.fn.data = (function () {
        var storage = {};
        return function data (name, val) {
            var id = $(this).selector;
            storage[id] = storage[id] || {};   
            if (val === void 0) {
                return storage[id][name];
            }
            storage[id][name] = val;
            return $(this);
        }
    }());
}

var foo = $('section').data('role','page');
var bar = $('article').data('role','content');
foo.text(foo.data('role'));
bar.text(bar.data('role'));

http://jsfiddle.net/dETuh/1/

请注意警报未运行,因此我的垫片甚至没有被使用..

答案 3 :(得分:1)

if ($(window).data === undefined) {
    $.fn.data = (function () {
        var storage = {};
        return function data (name, val) {
            var id = $(this).selector;
            storage[id] = storage[id] || {};   
            if (val === void 0) {
                return storage[id][name];
            }
            storage[id][name] = val;
            return $(this);
        }
    }());
}

var foo = $('section').data('role','page');
var bar = $('article').data('role','content');
foo.text(foo.data('role'));
bar.text(bar.data('role'));