搜索
javascript - 用data-*存数据好么?
大家讲道理
大家讲道理 2017-04-10 16:31:10
[JavaScript讨论组]

场景是类似这样的:
屏幕上有许多“石头”,每个“石头”都有自己的属性,例如质量,分数和速度等等。当鼠标点击石头的时候,显示出石头的各个属性。
我现在的解决方法是讲所有属性都放在dom上,用data-*来保存。

<p class="rocks" data-gram="10" data-score="100" data-speed="10"></p>

我想知道这样使用data-*对么,会有什么缺点么?
还有其他更好的方法么?

大家讲道理
大家讲道理

光阴似箭催人老,日月如移越少年。

全部回复(5)
高洛峰

data-*可以避免自定义属性混乱,但视图和模型混在一起了。
比如,将某个石头的属性放到视图中的某个位置,我们需要先从石头p中读取data并将其写到指定的位置。
当石头的属性渐渐变多,html代码中就多了很多和视图无关的东西,显得好乱。

认为@看不懂未来 同学的答案是一个好方法。
模型放到javascript中会更明确,如果使用angularJS,效果会更好。

例如:

<script>
    angular.module('ohMyStone',[])
    .controller('StoneCtrl',['$scope',function($scope){
        $scope.stone = {gram: 10,score: 100,speed: 10};
    }]);
</script>

<p ng-controller="StoneCtrl">
    <p>我有个重达{{stone.gram}}的石头,它的速度可以达到{{stone.speed}}km/s</p>
</p>
PHP中文网

你存在一个json里就好了,这样写不麻烦么?你可以用数组序列的方式来对应起来,也可以自己添加一个id对应起来

var stone = [
    { id: stone1,
      gram: 10,
      score: 100,
      speed: 10 },
    { id: stone2,
      gram: 10,
      score: 100,
      speed: 10 },
    { id: stone3
      gram: 10,
      score: 100,
      speed: 10 },
      ...
]

// 比如这样对应
<p class="rocks" data-item="stone1"></p>
  ...
天蓬老师

使用data-*可以解决自定义属性管理混乱的问题

虽然IE浏览器需要11以上版本才支持(原生Javascript代码获取)

但是

通过jQuery可以很方便的获取到这个属性:

<ul>
    <li data-animal-type="bird">Owl</li>
    <li data-animal-type="fish">Salmon</li> 
    <li data-animal-type="spider">Tarantula</li> 
</ul>

///////////////////////////////////////////
$('li:first').data('animal-type'); //bird
PHP中文网

同一个问题的英文版,可以对比下,有点意思。
http://stackoverflow.com/questions/34214840/is-it-right-to-put-data-in-html5-data

天蓬老师

非常可以,这样做是现在主流做法。
除非你用React之类有自己一套数据管理方式的框架,否则这是比较优雅的方式。

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号