最近读他们的jquery解读的源码,由于版本不同,我可能看的是他们解读的1.7的,但是我本身运行的可能是1.9的,所以有些出处,但是中心思想不变,我有疑问的时候,直接debug,让例子自己走一遍,好处是一目了然,缺点就是有些分支走不到,近我的可能吧!能理解的理解,理解不了的实践;这个是目前我的基本思路;

这几天在解读$.data(),$("").data()方法,之后会单独拿出文章来写自己的心得体会,看源码-》看一些前辈大神们的源码解读-》自己实践-》自己总结体会,扯远了

看到一篇文章写的是html5的属性data-xx的,即使咱们现在浏览器不支持html5,但是用jquery的话依然可以使用这些方法,举例说明(摘自网上):

<div data-role="page" data-last-value="43" data-hidden="true" data-options='{"name":"John"}'></div> 
$("div").data("role") === "page"; 
$("div").data("lastValue") === 43; 
$("div").data("hidden") === true; 
$("div").data("options").name === "John";

这里我把源码data在这里用到的主要方法说一下:

//elem代表div,key代表我们的role、lastValue等,data=undefined
function dataAttr( elem, key, data ) {
// If nothing was found internally, try to fetch any
// data from the HTML5 data-* attribute
     //这里主要工作就是解析“data-“形式的属性,判断data是否未定义,并且节点是不是element元素
     //如果data有值,则直接返回,因为在调用这个方法之前还有其他的方法调用,可能已经把data计算出来了
if ( data === undefined && elem.nodeType === 1 ) {
         //组装name属性,例如name = "data-role"
var name = "data-" + key.replace( rmultiDash, "-$1" ).toLowerCase();
         //js的原生代码得到data的值
data = elem.getAttribute( name );
         //是否是string类型
if ( typeof data === "string" ) {
try {
                  //各种判断,boolean,null,数字,string
data = data === "true" ? true :
data === "false" ? false :
data === "null" ? null :
// Only convert to a number if it doesn't change the string
                       //这里有个技巧:这个”+“可以用来判断数字,它先强制把对象转化成数字,如果对象本身不是数字,则返回NaN,例如:+5==5(true),+'a'=='a'(false)
+data + "" === data ? +data :
                        //测试数据是否是以{}包裹,是则尝试转成对象,这里提一下jQuery.paseJSON()这个方法,它会按照json的定义去判断参数,然后返回对象,不符合的转换不了,返回undefined
rbrace.test( data ) ? jQuery.parseJSON( data ) :
data;
} catch( e ) {} // Make sure we set the data so it isn't changed later
              //保存数据
jQuery.data( elem, key, data ); } else {
data = undefined;
}
} return data;
}

我这里说一下json对象,里面的属性必须是双引号,不能使用单引号,虽然页面界别不怎么区分,但是在json解析的时候会报错,例如

<div data-role="page" data-last-value="43" data-hidden="true" data-options='{"name":"John"}'></div> ,

cache中的存储是一个obj{name:"John"};

data-options的内容引号互换

<div data-role="page" data-last-value="43" data-hidden="true" data-options="{'name':'John'}"></div>

$("div").data("options").name === "undefined";

cache中的存储是一个字符串:"{'name':'John'}"

关于cache的相关知识同样在实例和静态方法data中会讲解

json的引号之伤的更多相关文章

  1. Json遇到引号需要转义的问题

    首先看一个简单的Json格式的数据: {data:{id:1,text:"this is text",src:"abc/abc/abc.png"},succes ...

  2. curl -d中的json存在引号怎么处理?

    1\将其改写为I'\''m就可以执行 2\ curl -u elastic:mypass -X GET "localhost:9200/_analyze?pretty" -d 'a ...

  3. java json转义引号

    String jsonMapStr = "{\"system\":\"1,\\\"2\\\",3\",\"createD ...

  4. C#基础-关于用json给控制台程序传值的坑

    上周遇到了一个非常诡异的坑,首先写了两个程序,第一个程序输出成dll,第二个程序是控制台程序. 在第一个程序里,我使用了process去启动第二个程序,同时传入了一个Json作为参数,即: Proce ...

  5. Python json解析

    #encoding: utf-8 ''' Author:Siukwan ''' import sys reload(sys) sys.setdefaultencoding('utf8') import ...

  6. Json+Ajax相关

    Ajax前戏之json: 1.什么是json? JSON(JavaScript Object Notation, JS 对象标记) 是一种轻量级的数据交换格式. 2.json对象和JavaScript ...

  7. 自定义HttpHandler配置iis8.0

    配置环境,window8 ,iis8.0,.net Framework4.0,托管管道模式“经典” 步骤 (1)进入iis管理器,选中要设置的网站-->功能视图-->MIME类型--> ...

  8. 前端笔记之JavaScript面向对象(一)Object&函数上下文&构造函数&原型链

    一.对象(Object) 1.1 认识对象 对象在JS中狭义对象.广义对象两种. 广义:相当于宏观概念,是狭义内容的升华,高度的提升,范围的拓展.狭义:相当于微观概念,什么是“狭”?因为内容狭隘具体, ...

  9. JSON 的标准:双引号而非单引号!

    刚刚测试发现一段很简单的.看似正确的代码却是错误的: <?php $json_str = "{'name':'Eric', 'age':23}"; var_dump(json ...

随机推荐

  1. Spring MVC集成slf4j-logback

    转自: Spring MVC集成slf4j-logback 1.  Spring MVC集成slf4j-log4j 关于slf4j和log4j的相关介绍和用法,网上有很多文章可供参考,但是关于logb ...

  2. (负)-margin在页面布局中的应用

    有关margin的原理可以看看这篇文章:http://www.cnblogs.com/2050/archive/2012/08/13/2636467.html#2457812 有关margin负值的几 ...

  3. 4、Web应用程序中的安全向量 -- over-posting(重复提交)

    模型绑定是ASP.NET MVC提供的强大功能,可遵照命名约定将输入元素映射到模型属性,从而极大地简化了处理用户输入的过程,然而,这也成为了攻击的另一种没接,给攻击者提供了一个填充模型属性的机会,右下 ...

  4. 关于string的对象引用

    什么都不说了, 一切都在代码里:                         Console.WriteLine(object.ReferenceEquals(c5, c4));  //False ...

  5. LeetCode OJ 35. Search Insert Position

    Given a sorted array and a target value, return the index if the target is found. If not, return the ...

  6. 2016NEFU集训第n+3场 D - Bicycle Race

    Description Maria participates in a bicycle race. The speedway takes place on the shores of Lake Luc ...

  7. Hexo搭建静态个人博客

    Hexo简介 之前在Github上托管的博客就是使用jekyll搭建的,官方的Github Pages同样推荐使用它.我之前体验了一下jekyll,没有达到我想要的效果.于是寻找替代方案,搜索同类博客 ...

  8. PHP ajax 限制 API 来源限制

    if(isset($_SERVER["HTTP_X_REQUESTED_WITH"]) && strtolower($_SERVER["HTTP_X_RE ...

  9. SharePoint 2013 配置InfoPath 列表表单

    转载来源:http://www.cnblogs.com/jianyus/p/3470113.html SharePoint列表,都是通过表单展示,有时候不太符合要求,这时候,我们可以通过定制表单,来是 ...

  10. C#第八天

    ArrayList ArrayList list=new ArrayList(): list.Add()           //添加单个元素 list.AddRange()   //添加集合元素 l ...