jquery中data()和js中dataset属性的区别
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属性的区别的更多相关文章
- php中向前台js中传送一个二维数组
在php中向前台js中传送一个二维数组,并在前台js接收获取其中值的全过程方法: (1),方法说明:现在后台将数组发送到前台 echo json_encode($result); 然后再在js页面中的 ...
- javascript中,一个js中的函数,第一句var _this = this;为什么要这样做?
javascript中,一个js中的函数,第一句var _this = this;为什么要这样做? 下面是源码: 下面这段代码是常用的网站首页,自动切换span或者tabbar来变更List显示内容的 ...
- 2. 假设当前文件夹中data.csv文件中存放了2020年某饭店营业额,第一列为日期(如2020-02-03),第二列为每天交易额(如3560),文件中第一行为表头,其余行为实 际数据。
假设当前文件夹中data.csv文件中存放了2020年某饭店营业额,第一列为日期(如2020-02-03),第二列为每天交易额(如3560),文件中第一行为表头,其余行为实 际数据.编写程序,完成下 ...
- JQuery中width和JS中JS中关于clientWidth offsetWidth scrollWidth 等的含义
JQuery中: width()方法用于获得元素宽度: innerWidth()方法用于获得包括内边界(padding)的元素宽度: outerWidth()方法用于获得包括内边界(padding)和 ...
- 如何将一个对象存到网页中并在js中使用
需求:希望在js中使用Controller传过来的对象,特别是对象里存有list的数据. 不希望循环使用隐藏域. 解决办法:在View中使用Json.Net序列化: @{ string jsonStr ...
- SparkSQL 中 RDD 、DataFrame 、DataSet 三者的区别与联系
一.SparkSQL发展: Shark是一个为spark设计的大规模数据仓库系统,它与Hive兼容 Shark建立在Hive的代码基础上,并通过将Hive的部分物理执行计划交换出来(by s ...
- 在vue项目中的main.js中直接使用element-ui中的Message 消息提示、MessageBox 弹框、Notification 通知
需求来源:向后台请求数据时后台挂掉了,后台响应就出现错误,不做处理界面就卡住了,这时需要在main.js中使用axios的响应拦截器在出现相应错误是给出提示.项目使用element-ui,就调用里面的 ...
- jq中$(function(){})和js中window.onload区别
先看下执行代码: $(function(){ console.log("jq");}) $(function(){ console.log("jq1") ...
- jquery中read与js中onload区别
在JavaScript中,onload函数是最经常使用的,几乎涉及到JavaScript的童鞋都少不了要接触它.这个函数的作用就是等待网页完全装载完了以后再去执行代码块内的语句,因为按照文档流的执行顺 ...
随机推荐
- js拷贝指定内容到剪切板
function copyTextToClipboard(text) { var textArea = document.createElement("textarea"); te ...
- Java并发-volatile的原理及用法
Java并发-volatile的原理及用法 volatile属性:可见性.保证有序性.不保证原子性.一.volatile可见性 在Java的内存中所有的变量都存在主内存中,每个线程有单独CPU缓存内存 ...
- Oracle_SQL(1) 基本查询
1.oracle的安装与卸载 2.PL/SQL Developer的安装 3.登陆PL/SQL Developer 4.SCOTT用户下表的介绍 5.基本查询语句 查询雇员的所有信息: select ...
- PAT 1076 Wifi密码(15)(代码)
1076 Wifi密码(15 分) 下面是微博上流传的一张照片:"各位亲爱的同学们,鉴于大家有时需要使用 wifi,又怕耽误亲们的学习,现将 wifi 密码设置为下列数学题答案:A-1:B- ...
- N! (数组)
#include <iostream> using namespace std; ; int f[MAXN]; int main(){ int n; cin >> n; f[] ...
- 1.3 Java中的标识符和关键字
1.标识符 含义:标识符用于给程序中的类.变量.方法命名的符号. 组成:数字(0-9).字母(a-z)(A-Z).下划线(_).美元符号$. 命名规则:1.数字不能够作为命名符号的开头 2.不能够使用 ...
- NC 5系自定义显示公式
1.继承NcInnerFunction(nc.vo.pub.formulaset.function.NcInnerFunction) 在方法中引用父类方法function,并在里面写方法 @Overr ...
- Tomcat的目录结构及部署应用程序
下载好的二进制的Tomcat,解压会看到7个目录,如下: bin 目录:Tomcat的脚本存放目录,如启动.关闭脚本等.其中 **.bat用于windows平台,**.sh用于Linux平台 conf ...
- 学习selenium的过程
- Android中关于使用空格对齐文字
前言:今日编写新项目UI时,突然遇到文本有长有短无法对齐的问题(汗,以前竟从未遇到也从未考虑过这小小的问题),在资源文件中尝试Tab键.space空格键,发现效果都不能很好的实现,无奈只得请求度娘的协 ...