INTRO

  html的标签属性data-允许用户自定义属性。原生javascript和jquery分别定义了dataset属性和data()方法对标签中的data属性进行操作。

取值:

  如我们定义这样两个标签:  

<h1 data-attrname="balabala"></h1>
<h2 data-attrname="[1,2,3,4]"></h2>

  javascript的访问方式是dataset.attrname。我们分别访问h1和h2标签的attrname会得到"balabala"和"[1,2,3,4]"两个字符串。

  jquery的访问方式是data("attrname")。访问两个标签的attrname会得到"balabala"和[1,2,3,4]。

  在取值的时候JQuery可以帮我们直接还原数据类型。

赋值:

  Javascript对data自定义属性的赋值操作是dataset.attrname="new value"。  也可以这样赋值:data.attrname=true, =123, =[1,2,3]。当然正如上面说的,再拿到它们的时候依然只是字符串。

  JQuery对data自定义属性的赋值操作是data("attrname","new value")。同样可以这样赋值:data("attrname",123),data("attrname",[1,2,3]),data("attrname",true)。不同的是它不会“好心”的帮我们转换为字符串,会保留原来的数据类型。

  

  这里你可能会非常痛恨JS的“好心”。但其实,真相是它“好心”的还不够。

  HTML本身只支持字符串。JS的好心是帮你把所有类型转换成字符串,JQuery的“好心”是它根本就不相信HTML标签。

  因为如果在赋值的过程中仔细观察标签属性就会发现,只有JS对HTML标签进行了操作。

注意:

  1st:不要混用

  所以当用JQUERY进行赋值的之后,JS是访问不到的。

  你可能会好奇,反过来呢?当然是。。。。也访问不到╮(╯▽╰)╭

  JQUERY的data()访问的逻辑是,如果曾经用data()赋值过,就会装作不认识HTML标签去找赋过的值,如果没有在去找“妈妈”要。

  2nd:不要相信JS的“好心”

  针对没那么“好心”的JS,聪明的孩子可能会想到两个解决办法:eval(),JSON。

  如果标签是这样的<h1 data-attrname="[1,2,3]"></h1>。eval(),和JSON.parse()都会给你你想要的。

  但如果是用JS进行赋值dataset.attrname=[1,2,3,4];  JS会帮你转换为"1,2,3,4"。如果你用了eval()就会拿到number 4。至于JSON。。。它根本就不认识这个货。

  所以如果你就是想用js就老老实实的赋值dataset.attrname="[1,2,3,4]";别让JS的好心帮了你的倒忙。

  

jquery中data()和js中dataset属性的区别的更多相关文章

  1. php中向前台js中传送一个二维数组

    在php中向前台js中传送一个二维数组,并在前台js接收获取其中值的全过程方法: (1),方法说明:现在后台将数组发送到前台 echo json_encode($result); 然后再在js页面中的 ...

  2. javascript中,一个js中的函数,第一句var _this = this;为什么要这样做?

    javascript中,一个js中的函数,第一句var _this = this;为什么要这样做? 下面是源码: 下面这段代码是常用的网站首页,自动切换span或者tabbar来变更List显示内容的 ...

  3. 2. 假设当前文件夹中data.csv文件中存放了2020年某饭店营业额,第一列为日期(如2020-02-03),第二列为每天交易额(如3560),文件中第一行为表头,其余行为实 际数据。

    假设当前文件夹中data.csv文件中存放了2020年某饭店营业额,第一列为日期(如2020-02-03),第二列为每天交易额(如3560),文件中第一行为表头,其余行为实  际数据.编写程序,完成下 ...

  4. JQuery中width和JS中JS中关于clientWidth offsetWidth scrollWidth 等的含义

    JQuery中: width()方法用于获得元素宽度: innerWidth()方法用于获得包括内边界(padding)的元素宽度: outerWidth()方法用于获得包括内边界(padding)和 ...

  5. 如何将一个对象存到网页中并在js中使用

    需求:希望在js中使用Controller传过来的对象,特别是对象里存有list的数据. 不希望循环使用隐藏域. 解决办法:在View中使用Json.Net序列化: @{ string jsonStr ...

  6. SparkSQL 中 RDD 、DataFrame 、DataSet 三者的区别与联系

    一.SparkSQL发展: Shark是一个为spark设计的大规模数据仓库系统,它与Hive兼容      Shark建立在Hive的代码基础上,并通过将Hive的部分物理执行计划交换出来(by s ...

  7. 在vue项目中的main.js中直接使用element-ui中的Message 消息提示、MessageBox 弹框、Notification 通知

    需求来源:向后台请求数据时后台挂掉了,后台响应就出现错误,不做处理界面就卡住了,这时需要在main.js中使用axios的响应拦截器在出现相应错误是给出提示.项目使用element-ui,就调用里面的 ...

  8. jq中$(function(){})和js中window.onload区别

    先看下执行代码: $(function(){   console.log("jq");}) $(function(){   console.log("jq1") ...

  9. jquery中read与js中onload区别

    在JavaScript中,onload函数是最经常使用的,几乎涉及到JavaScript的童鞋都少不了要接触它.这个函数的作用就是等待网页完全装载完了以后再去执行代码块内的语句,因为按照文档流的执行顺 ...

随机推荐

  1. Jenkins与Git持续集成&&Linux上远程部署Java项目

    一.环境搭建 1.安装所需软件 Jdk Maven Jenkins Tomcat Xshell git 以上软件去官网下载,比较简单,不一一描述了 2.安装所需的jenkins插件 Git plugi ...

  2. 修改JEECG项目浏览器标题

    方法1: 在线修改,在平台自带的功能“系统管理”——“国际化语言” 中搜索 jeect.platform,修改显示文字重启生效. 方法2: 修改数据表t_s_muti_lang中id为"40 ...

  3. poj 2528(线段树+离散化) 市长的海报

    http://poj.org/problem?id=2528 题目大意是市长竞选要贴海报,给出墙的长度和依次张贴的海报的长度区间(参考题目给的图),问最后你能看见的海报有几张 就是有的先贴的海报可能会 ...

  4. 希尔排序和归并排序(java实现)

    希尔排序 希尔排序算法实际上是一种特殊的插入排序,由DL.Shell于1959年提出而得名. 算法思想:希尔排序使数组中任意间隔为h的元素都是有序的,这些数组称为h有序数组,对于每个h,按插入排序进行 ...

  5. Porsche PIWIS TESTER III

    Allscanner VXDIAG Porsche Piwis III with Lenovo T440P Laptop  Porsche Piwis tester III V37.250.020 N ...

  6. Jsonpath的基本使用

    JSONPath - 是xpath在json的应用. xml最大的优点就有大量的工具可以分析,转换,和选择性的提取文档中的数据.XPath是这些最强大的工具之一.   如果可以使用xpath来解析js ...

  7. javascript数组中数字和非数字下标的区别(转)

    http://blog.csdn.net/qq_27461663/article/details/52014911 考完试后闲来无事,想起好多天没写js了,于是打算实践一下最近看到的一些好玩的点子.结 ...

  8. [线段树]picture

    PICTURE 题目描述 N(N<5000) 张矩形的海报,照片和其他同样形状的图片贴在墙上.它们的边都是垂直的或水平的.每个矩形可以部分或者全部覆盖其他矩形.所有的矩形组成的集合的轮廓称为周长 ...

  9. PHP 获取当前所在的类名、方法名等

    PHP获取当前类名.方法名  __CLASS__ 获取当前类名  __FUNCTION__ 当前函数名(confirm)  __METHOD__ 当前方法名 (bankcard::confirm) _ ...

  10. [SoapUI] 从Map里面不想要的键值对

    def keysToRemoveForBoss = ["RequestIdBmk", "RequestIdTest"] def extraInfoMapForB ...