将数据与jQuery的DOM元素相关联

Sol*_*nal 5 jquery unobtrusive-javascript

在以前的生活中,我可能做过这样的事情:

<a href="#" onclick="f(311);return false;">Click</a><br/>
<a href="#" onclick="f(412);return false;">Click</a><br/>
<a href="#" onclick="f(583);return false;">Click</a><br/>
<a href="#" onclick="f(624);return false;">Click</a><br/>
Run Code Online (Sandbox Code Playgroud)

现在使用jQuery,我可能会这样做:

<a class="clicker" alt="311">Click</a><br/>
<a class="clicker" alt="412">Click</a><br/>
<a class="clicker" alt="583">Click</a><br/>
<a class="clicker" alt="624">Click</a><br/>

<script language="javascript" type="text/javascript">
    $(".clicker").bind("click", function(e) {
        e.preventDefault();
        f($(this).attr("alt"));
    });
</script>
Run Code Online (Sandbox Code Playgroud)

除了使用alt属性将数据从DOM传递给jQuery感觉就像一个黑客,因为这不是它的预期目的.这里存储/隐藏DOM中的数据以供jQuery访问的最佳实践是什么?

Mar*_*ett 3

JQuery.data允许您将字典与 DOM 元素关联起来。该数据可以通过 jQuery 设置:

<a class="clicker">Click</a><br/>
<a class="clicker">Click</a><br/>
<a class="clicker">Click</a><br/>
<a class="clicker">Click</a><br/>

<script language="javascript" type="text/javascript">
    var values = new Array("311", "412", "583", "624");
    $(".clicker").each(function(i, e) {
       $(this).data('value', values[i]).click(function(e) { 
         f($(this).data('value'));
       });
    });
</script>
Run Code Online (Sandbox Code Playgroud)

或者(自 jQuery 1.4.3 起)使用HTML5 data- 属性,即使在非 HTML5 文档中也可以使用:

<a class="clicker" data-value="311">Click</a><br/>
<a class="clicker" data-value="412">Click</a><br/>
<a class="clicker" data-value="583">Click</a><br/>
<a class="clicker" data-value="624">Click</a><br/>

<script language="javascript" type="text/javascript">
    $(".clicker").click(function(e) { 
       f($(this).data('value'));
    });
</script>
Run Code Online (Sandbox Code Playgroud)