1.  after, before, append, prepend 的区别

A.after(B) ==== B.insertAfter(A)     // B 放在 A 的后面
A.before(B) ==== B.insertBefore(A)  // B 放在 A 的前面
A.append(B) ==== B.appendTo(A)   // B 放在 A 最后一个子元素的后面
A.prepend(B) ==== B.prependTo(A)  // B 放在 A 第一个子元素的后面

2.  children find parent parents closest 区别; 不传参数则是找到所有的元素
  children 找的是所有的直接子元素 --- 可以在同一级的子元素
  find 找的是所有子元素 --- 可以在同一级的子元素
  parent 获取对象集合中每个元素的直接父元素 --- 一定是父级,不能是父级的同级
  parents 获取对象集合每个元素所有的祖先元素 --- 一定是父级,不能是父级的同级
  closest 从元素本身开始,逐级向上级元素匹配,并返回最先匹配selector的元素--- 一定是父级,不能是父级的同级

3:  zepto-1.1.6.js 和 jquery-1.12.4.js 下, 如果是"空数组"覆盖不了"非空数组"的值。

var obj = {a: {b: [1,2]} };
var obj2 = {a: {b: []} };
$.extend(true, obj, obj2);
//obj 没变: {a: {b: [1,2]} }, 覆盖不了 var obj = {a: {b: [1,2]} };
var obj2 = {a: {b: [3]} };
$.extend(true, obj, obj2);
//obj 变了: {a: {b: [3,2]} } var obj = {a: {b: {a: 1}} };
var obj2 = {a: {b: []} };
$.extend(true, obj, obj2);
// obj 变了: {a: b: []}, 由于一个是数组,一个是对象,所以全部覆盖了

3.  $()

$(htmlString, attributes)
$("<p />", { text:"Hello", id:"greeting", css:{color:'darkblue'} })

4.  $.contains

$.contains(parent, node)
检查父节点是否包含给定的dom节点,如果两者是相同的节点,则返回 false。

$.contains( document.documentElement, document.body ); // true
$.contains( document.documentElement, $('.aaaa')[0] ); // false, $('.aaaa')[0] 是undefined

5.  $.grep

获取一个新数组,新数组只包含回调函数中返回 ture 的数组项。

$.grep([1,2,3],function(item){
return item > 1
});//=>[2,3]

6:  $.inArray

返回数组中指定元素的索引值(愚人码头注:以0为基数),如果没有找到该元素则返回-1。

$.inArray('a', ['b', 'c', 'a']) //
$.inArray('a222', ['b', 'c', 'a']) // -1

7:  $.isPlainObject
测试对象是否是“纯粹”的对象

$.isPlainObject(new Date) // => false
$.isPlainObject(window) // => false
$.isPlainObject({}) // => true

8:  $.map
通过遍历集合中的元素,返回通过迭代函数的一个新数组,null 和 undefined 将被过滤掉。
注意: 既可以遍历数组,也可以遍历对象。注意函数的参数是 item, index
遍历完对象之后返回的还是数组,所以一般不遍历对象

$.map([1,2,3,4,5],function(item, index){
  if(item>1){return item*item;}
}); // =>[4, 9, 16, 25] $.map({"yao":1,"tai":2,"yang":3},function(item,index){
  if(item>1){return item*item;}
}); // =>[4, 9]

9:  attr
attr(name, function(index, oldValue){ ... })
attr({ name: value, name2: value2, ... }) 支持对象传递

$('body').attr('data-it', 10);
$('body').attr('data-it', function(index, oldValue){
  // oldValue 为 string 格式
  return oldValue * 2;
});// => body 变成 data-it 20

10:  closest
closest(selector, [context])
closest(collection)
closest(element)
参数context 比较特殊, 它必须是 selector 的父级元素(不用直接父级)才会起作用。当它是 selector 的子元素,则阻断查找(也就是最后结果是: [] 空Zepto数组);若它是selector的父元素,则没有问题。
查看jquery-1.12.4 源代码, 重点一行 cur !== context, 若等于就阻断了

for ( cur = this[ i ]; cur && cur !== context; cur = cur.parentNode ){}

其它例子:

$('a').closest('.cnt')
//若 $('.cnt') 有多个集合, jquery 结果会选择多个 cnt, zepto 默认只会选择第一个 cnt
$('a').closest( $('.cnt') )
$('a').closest( document.getElementById('cnt') )
$('a').closest( document.querySelectorAll('.cnt') ) // jquery 有效, zepto无效

11:  concat
这个方法 zepto里直接使用[].concat, 返回的是原生的数组 而不是 Zepto 的数组。
联想到, 如果你需要按顺序把原生Dom 放在一个数组里,则:

var arr = [];
arr.push( $('.dom')[0] );
arr.push( $('.dom2')[0] );
arr.push( $('.dom3')[0] );
$(arr);

12:  css
css([property1, property2, ...])

$('.cnt1').css(['background-color', 'font-size', 'color'])
// {background-color: "rgb(255, 0, 0)", font-size: "", color: "rgb(0, 0, 0)"}

注意: 若css 写在 style 里<style type='text/css'> .cnt1 { font-size: 30px;} </style>, 那么 $('.cnt1').css(['backgroundColor', 'fontSize']) 取不到值, zepto 处理不好的地方,需要改成 $('.cnt').css(['background-color', 'font-size'])

13:  filter

filter 和 map 的区别是, map 里每次遍历元素时 return 的值就是实际的值。 filter 里每次元素只有 return 为 true, 那个值才会被放到集合里。
filter 和 not 刚好相反的功能

$('.cnt').filter('.cnt1')
$('.cnt').filter( $('.cnt1') ); // 这么写会报错, 而not 可以 // 只有第1个参数 index, 没有 el
$('.cnt').filter( function(index, el){
console.log(index, el); // el 为undefined
}); // 相当于 $('.cnt2')
$('.cnt').filter( function(index, el){
if( $(this).hasClass('cnt2') ){
return true;
}
});

14:  find
find 和 children 功能区别是, children只寻找直接子元素, find 是查找所有后代元素

$('.box').find( '.cnt1' )
$('.box').find( $('.cnt1') ) // 找到所有的 .cnt1
$('.box').find( $('.cnt1')[0] ) // 找到 .cnt1 的集合里的第1个

15:  get
get() ==> array
get(index) ==> DOM node

var elements = $('h2');
elements.get(); // 变成一个数组, 相当于[].slice.call(elements);
elements.get(0); // 相当于 elements[0];

16:  has
has(selector)
has(node)
判断当前对象集合的子元素是否有符合选择器的元素,或者是否包含指定的DOM节点。如果有,则返回新的对象集合。

$('.box').has('a') // 如果 box 元素里 a标签, 返回 box 集合
$('.box').has( document.getElementById('cnt1') );
//通常我项目里会这样写:
$('.box').fitler(function(){
  if( $(this).find('a').length > 0 ){
    return true;
  }
});

17:  height
height(function(index, oldHeight){ ... })

// 返回原来高度的两倍
$('a').eq(0).height(function(i, h){
  return h * 2;
});

18:  html
html(function(index, oldHtml){ ... })

19:  index
index([element]);

<div class='cnt cnt1' id='cnt1'>
  <a href='https://www.baidu.com/' class='a a1'>aaa</a>
  <div></div>
  <a href='https://www.baidu.com/' class='a a2'>aaa</a>
  <a href='https://www.baidu.com/' class='a a3'>aaa</a>
</div>
<script>
  $('.a2').index(); // 2 这个值其实不是我们想要的
  $('.a').index( $('.a2') ); // 1, 对了。源代码里其实就是用了类似 [2,3,4].indexOf(4);
</script>

20:  map
同 $.map, 不过它是遍历 zepto 对象集合.

$('a').map(function(){ return 1}) // 若有两个a, 则返回[1,1]

21:  offset
offset() ==> object
offset(coordinates) ==> self
offset(function(index, oldOffset){ ... })

$('.cnt2').offset(); // 返回一个对象 {left: 200, top: 36, width: 595, height: 18}
$('.cnt2').offset({left: 200}); // 赋值 left: 200
$('a').offset(function(index, oldOffset){ }) // oldOffset 相当于 {left: 200, top: 36, width: 595, height: 18}

22:  pluck

pluck(property) ==> array
pluck 相当于直接取属性的值, 比如 $('a').eq(0)['href'] 等同于 $('a').eq(0).pluck('href')
只不过里面的源代码里面用 $.map 包装了下, 结果返回的是属性值的集合
return $.map(this, function(el){ return el[property] })

23:  positon
它和 offset 的区别是, 假设 B元素{position: absolute; left: 300px; top: 300px;} 的offsetParent() A {position: relative; left: 100px, top: 100px}
那么 B 的 offset() 为 {top: 400, left: 400}; position 为 {top: 100, left: 100}
源代码里:

return {
  top: offset.top - parentOffset.top,
  left: offset.left - parentOffset.left
}

24:  replaceWith
用给定的内容替换所有匹配的元素。(包含元素本身)

25:  unwrap
移除集合中每个元素的直接父节点,并把他们的子元素保留在原来的位置。 基本上,这种方法删除上一的祖先元素,同时保持DOM中的当前元素。

wrap
wrap(structure)
wrap(function(index){ ... })
wrapAll
wrapInner

3者的区别是:

<div class='a'>
  <p>a</p>
  <p>b</p>
</div> $('p').wrap('<div class="b"></div>');
/* 结果是:
<div class='a'>
<div class="b">
   <p>a</p>
</div>
<div class="b">
   <p>b</p>
</div>
</div>
*/ $('p').wrapAll('<div class="b"></div>');
/* 结果是:
<div class='a'>
<div class="b">
<p>a</p>
<p>b</p>
</div>
</div>
*/ $('p').wrapInner('<div class="b"></div>');
/* 结果是:
<div class='a'>
<p><div class="b">a</div></p>
<p><div class="b">b</div></p>
</div>
*/

26:  $.proxy
$.proxy(fn, context)
$.proxy(fn, context, [additionalArguments...])
$.proxy(context, name) // 这里 property 改成 name
$.proxy(context, name, [additionalArguments...]) // 这里 property 改成 name

最常用的 $.proxy(fn, context);
$.proxy(fn, context, [additionalArguments...])

$.proxy(context, name)
The name of the function whose context will be changed (should be a property of the context object).

var obj = {
name: "John",
test: function(para, e) {
// e 必须有用户点击触发
console.log(this.name + ' sssss');
}
}; /*
test 为obj 里的 function 的名字
若直接执行 fn(), e 是取不到值的(为 undefined), 必须有用户点击事件触发。
最后一个参数始终为 event 对象
*/
var fn = jQuery.proxy(obj, "test", 'para');

27:  on
on(type, [selector], [data], function(e){ ... })
on({ type: handler, type2: handler2, ... }, [selector], [data])

$('body').on({click: function(e){
e.preventDefault();
console.log(e.data); // 输出 sss
}}, '#div', 'sss'); $('body').on('click', '#div', 'sss', function(e){
e.preventDefault();
console.log(e.data); // 输出 sss
});

28:  $.Event

var mylib = $.Event('mylib:change', {a: 1 });
$('body').on('mylib:change', function(a, b){
console.log(a);
console.log(b); // undefined, 第2个参数b 是传递不过来
});
$('html').on('mylib:change', function(){
console.log('html');
}); // 或者用 $('body').trigger('mylib:change'), 最后会冒泡到 html 上
$('body').trigger(mylib); // 若改 mylib 为
var mylib = $.Event('mylib:change', {bubbles: false});
$('body').trigger(mylib); // 将不会冒泡

29:  Ajax 请求
context (default: window): context to execute callbacks in
traditional (default: false): activate traditional (shallow) serialization of data parameters with $.param ---- 参考 $.param

Ajax callbacks 回调函数
beforeSend(xhr, settings): before the request is sent.
complete(xhr, status): after the request is complete, regardless of error or success

$.ajax({
  url:'',
  dataType: 'json',
  beforeSend: function(){},
  success: funciton(){},
  error: function(){},
  // 这个挺好用的, 不用再 success和error 里面都执行同一函数
  complete: function(){},
});

Ajax events => Ajax 事件;
1. ajaxStart
2. ajaxBeforeSend
3. ajaxSend
4. ajaxSuccess
5. ajaxError
6. ajaxComplete
7. ajaxStop

// 默认情况下,Ajax事件在document对象上触发。然而,如果请求的 context 是一个DOM节点,该事件会在此节点上触发然后再DOM中冒泡。唯一的例外是 ajaxStart & ajaxStop这两个全局事件。

$(document).on('ajaxBeforeSend', function(e, xhr, options){
// This gets fired for every Ajax request performed on the page.
// The xhr object and $.ajax() options are available for editing.
// Return false to cancel this request.
});

Content-Type

POST 默认的 Content-Type
Content-Type:application/x-www-form-urlencoded; charset=UTF-8

GET 默认的 Content-Type
jQuery和Zepto 里面源代码没有设置任何值,

若指定 contentType 为 'application/json', 则是为了传递的data是可以有深度的对象

// post a JSON payload:
$.ajax({
  type: 'POST',
  url: '/projects',
  // post payload:
  data: JSON.stringify({
    a: 1,
    b: {
      c: 2
    }
  }),
  contentType: 'application/json'
});

若用 get方式, 最后传递的可能会是: a=1&b%5Bc%5D=2, 前端可读性不好,后台也不好处理
若用 post 方式, 控制台From Data里面是 a:1, b[c]:2, 后台也是不好处理

$.ajaxSettings的设置里面有 beforeSend 和 complete, 可以设置全站的发送请求前作一些动作,比如有正在加载 loading的效果

$.ajaxSettings = {
  // Default type of request
  type: 'GET',
  // Callback that is executed before request
  beforeSend: empty,
  // Callback that is executed if the request succeeds
  success: empty,
  // Callback that is executed the the server drops error
  error: empty,
  // Callback that is executed on request complete (both: error and success)
  complete: empty,
  ....
}

Zepto API 学习的更多相关文章

  1. Openstack api 学习文档 & restclient使用文档

    Openstack api 学习文档 & restclient使用文档 转载请注明http://www.cnblogs.com/juandx/p/4943409.html 这篇文档总结一下我初 ...

  2. ASP.NET MVC Web API 学习笔记---第一个Web API程序

    http://www.cnblogs.com/qingyuan/archive/2012/10/12/2720824.html GetListAll /api/Contact GetListBySex ...

  3. Openstack python api 学习文档 api创建虚拟机

    Openstack python api 学习文档 转载请注明http://www.cnblogs.com/juandx/p/4953191.html 因为需要学习使用api接口调用openstack ...

  4. Zepto,Zepto API 中文版,Zepto 中文手册,Zepto API,Zepto API 中文版,Zepto 中文手册,Zepto API 1.0, Zepto API 1.0 中文版,Zepto 1.0 中文手册,Zepto 1.0 API-translate by yaotaiyang

    Zepto,Zepto API 中文版,Zepto 中文手册,Zepto API,Zepto API 中文版,Zepto 中文手册,Zepto API 1.0, Zepto API 1.0 中文版,Z ...

  5. Zepto Api参考

    zepto API参考 简介 Zepto是一个轻量级的针对现代高级浏览器的JavaScript库, 它与jquery有着类似的api. 如果你会用jquery,那么你也会用zepto. 设计目的 ze ...

  6. Windows录音API学习笔记(转)

    源:Windows录音API学习笔记 Windows录音API学习笔记 结构体和函数信息  结构体 WAVEINCAPS 该结构描述了一个波形音频输入设备的能力. typedef struct { W ...

  7. NSData所有API学习

      www.MyException.Cn  网友分享于:2015-04-24  浏览:0次   NSData全部API学习. 学习NSData,在网上找资料竟然都是拷贝的纯代码,没人去解释.在这种网上 ...

  8. Node.js API 学习笔记

    常用 API 学习笔记 url 函数 url.parse: 解析 url 地址 url.resolve: 向 url 地址添加或替换字段 url.format: 生成 url 地址 querystri ...

  9. 框架源码系列十一:事务管理(Spring事务管理的特点、事务概念学习、Spring事务使用学习、Spring事务管理API学习、Spring事务源码学习)

    一.Spring事务管理的特点 Spring框架为事务管理提供一套统一的抽象,带来的好处有:1. 跨不同事务API的统一的编程模型,无论你使用的是jdbc.jta.jpa.hibernate.2. 支 ...

随机推荐

  1. Python使用struct处理二进制

    有的时候需要用python处理二进制数据,比如,存取文件,socket操作时.这时候,可以使用python的struct模块来完成.可以用 struct来处理c语言中的结构体. struct模块中最重 ...

  2. My Construct

    1.构造函数定义 类中的构造函数用来初始化一个类.构造函数为公有类型,无返回值,用来从类实例中访问类时初始化此类的私有变量. 2.代码 public class UseConstruct { publ ...

  3. 家里蹲大学数学杂志 Charleton University Mathematics Journal 官方目录[共七卷493期,6055页]

    家里蹲大学数学杂志[官方网站]从由赣南师范大学张祖锦老师于2010年创刊;每年一卷, 自己有空则出版, 没空则搁置, 所以一卷有多期.本杂志至2016年12月31日共7卷493期, 6055页.既然做 ...

  4. java获取当前日期等以及时区

    代码: public static void main(String[] args) throws Exception{ /* * 获取当前时间的办法 */ //这个获取从1970年..直到现在的毫秒 ...

  5. MD5 32位 小写加密和大写加密

    /** * MD5加密方法 */ public static String MD5(String str) { MessageDigest md5 = null; try { md5 = Messag ...

  6. Java 反射 getDeclareFields getModifiers setAccessible(true)

    示例代码: public static Map<String, Object> dtoToMap(Object obj, String pre,            String las ...

  7. Jquery实现兼容各大浏览器的Enter回车切换输入焦点的方法

    <script type="text/javascript"> $('input:text:first').focus(); document.onkeydown = ...

  8. Hive On Spark hiveserver2方式使用

    启动hiveserver2: hiveserver2 --hiveconf hive.execution.engine=spark spark.master=yarn 使用beeline连接hives ...

  9. logging 日志模块学习

    logging 日志模块,用于记录系统在运行过程中的一些关键信息,以便于对系统的运行状况进行跟踪,所以还是灰常重要滴,下面我就来从入门到放弃的系统学习一下日志既可以在屏幕上显示,又可以在文件中体现. ...

  10. HTML 浏览器显示控制

    //强制浏览器以最高版本运行页面 <meta http-equiv="X-UA-Compatible" content="IE=edge,Chrome=1" ...