论坛首页 Web前端技术论坛

JavaScript内核系列 第12章 前端JavaScript框架:jQuery

浏览 10866 次
精华帖 (6) :: 良好帖 (4) :: 新手帖 (0) :: 隐藏帖 (1)
作者 正文
   发表时间:2012-02-07  
介绍的真不错.
0 请登录后投票
   发表时间:2012-02-08  
没用过这么复杂的选择器.
0 请登录后投票
   发表时间:2012-02-08  
__游乐场 写道
没用过这么复杂的选择器.

可能是没写过太复杂的页面,哈哈。我在第八章(下)http://www.iteye.com/topic/660063里介绍了一个例子,那个例子的原型是一个很复杂的页面,前前后后改了4次结构,历时1个多月,就是一个dialog而已,这种场景就需要很多的“复杂的”选择器。如果只是简单的页面开发,用不到太多,id选择器和class选择器就差不多够了。
0 请登录后投票
   发表时间:2012-02-09  
WX,抱歉啊楼主,我点收藏呢,结果点到隐藏了....
0 请登录后投票
   发表时间:2012-02-09   最后修改:2012-02-09

距离上一章真的好长时间,我也通过这本书从java转向了JavaScript,真的是很棒的一本书讲的很清晰透彻;感谢楼主
本章有个小错误:
$.map的例子应该是$.each的例子

var person = [  
       {name : "jack", age : 26},  
       {name : "johb", age : 23},  
       {name : "smith", age : 20},  
       {name : "abruzzi", age : 26},  
       {name : "juntao", age : 25},  
       {name : "jim", age : 24},  
       {name : "bob", age : 24}  
    ];  
     
   $.each(person, function(item){  
       this.name = this.name.toUpperCase();  
    });  


结果:

 
$.map的功能是通过原数组构建新数组,提供一个$.map的例子

var person = [  
       {name : "jack", age : 26},  
       {name : "johb", age : 23},  
       {name : "smith", age : 20},  
       {name : "abruzzi", age : 26},  
       {name : "juntao", age : 25},  
       {name : "jim", age : 24},  
       {name : "bob", age : 24}  
    ];  
     
   $.map(person, function(item){  
       return item.name;
    }); 

结果得到名字组成的数组:


 

  • 大小: 5.2 KB
  • 大小: 1.3 KB
0 请登录后投票
   发表时间:2012-02-10  
p2world 写道

距离上一章真的好长时间,我也通过这本书从java转向了JavaScript,真的是很棒的一本书讲的很清晰透彻;感谢楼主
本章有个小错误:
$.map的例子应该是$.each的例子

var person = [  
       {name : "jack", age : 26},  
       {name : "johb", age : 23},  
       {name : "smith", age : 20},  
       {name : "abruzzi", age : 26},  
       {name : "juntao", age : 25},  
       {name : "jim", age : 24},  
       {name : "bob", age : 24}  
    ];  
     
   $.each(person, function(item){  
       this.name = this.name.toUpperCase();  
    });  


结果:

 
$.map的功能是通过原数组构建新数组,提供一个$.map的例子

var person = [  
       {name : "jack", age : 26},  
       {name : "johb", age : 23},  
       {name : "smith", age : 20},  
       {name : "abruzzi", age : 26},  
       {name : "juntao", age : 25},  
       {name : "jim", age : 24},  
       {name : "bob", age : 24}  
    ];  
     
   $.map(person, function(item){  
       return item.name;
    }); 

结果得到名字组成的数组:


 

 

不应该这样理解吧:map一般是指对既有集合的更改,并返回一个集合,与map/reduce中的map一样。你的这个map更像是一个抽取。另外,很高兴这个系列能对你有真实的帮助。第十四章已经发布,在icodeit上.

0 请登录后投票
   发表时间:2012-02-10   最后修改:2012-02-10

abruzzi 写道

$(document).ready(function(){
    var person = [
       {name : "jack", age : 26},
       {name : "johb", age : 23},
       {name : "smith", age : 20},
       {name : "abruzzi", age : 26},
       {name : "juntao", age : 25},
       {name : "jim", age : 24},
       {name : "bob", age : 24}
    ];
   
    var mapped = $.map(person, function(item){
       return item.name = item.name.toUpperCase();
    });
   
    console.dir(person);//原始的person列表已被修改
});



楼主客气了,能有时间、精力为我们后来者提供高品质的学习资料,功德无量~
为了这本书,我还得继续:
jquery官方解释:

“ to new array ”
jquery官方示例:
  var arr = [ "a", "b", "c", "d", "e" ];
    $("div").text(arr.join(", "));
    arr = jQuery.map(arr, function(n, i){
      return (n.toUpperCase() + i);
    });
    $("p").text(arr.join(", "));
    arr = jQuery.map(arr, function (a) { 
      return a + a; 
    });
    $("span").text(arr.join(", "));

map方法主要是为了通过遍历一个对象(数组)生成新数组。就是楼主说的抽取。
重要的是mapped这个值,而不是原来的person对象。如果只是要修改person对象有$.each就足够了,不需要开销更大并且有其他文意的map。
这样其实有点误用。大家一看到map就想到了抽取,而不会想到它居然修改了原始对象。增加了后期调试bug产生几率。
对于是否修改原对象,$.each,$.map都可以做到。
并且个人不推荐使用$.each,应尽量使用for...in 函数在js中的开销是比较大的。
  • 大小: 7.5 KB
0 请登录后投票
   发表时间:2012-02-10  
p2world 写道
楼主客气了,能有时间、精力为我们后来者提供高品质的学习资料,功德无量~

为了这本书,我还得继续:
jquery官方解释:

“ to new array ”
jquery官方示例:
  var arr = [ "a", "b", "c", "d", "e" ];
    $("div").text(arr.join(", "));

    arr = jQuery.map(arr, function(n, i){
      return (n.toUpperCase() + i);
    });
    $("p").text(arr.join(", "));

    arr = jQuery.map(arr, function (a) { 
      return a + a; 
    });
    $("span").text(arr.join(", "));


[quote="abruzzi"]

[code="js"]$(document).ready(function(){
    var person = [
       {name : "jack", age : 26},
       {name : "johb", age : 23},
       {name : "smith", age : 20},
       {name : "abruzzi", age : 26},
       {name : "juntao", age : 25},
       {name : "jim", age : 24},
       {name : "bob", age : 24}
    ];
   
    var mapped = $.map(person, function(item){
       return item.name = item.name.toUpperCase();
    });
   
    console.dir(person);//原始的person列表已被修改
});



map方法主要是为了通过遍历一个对象(数组)生成新对象(数组)。就是楼主说的抽取。
重要的是mapped这个值,而不是原来的person对象。如果只是要修改person对象有$.each就足够了,不需要开销更大并且有其他文意的map。
这样其实有点误用。大家一看到map就想到了抽取,而不会想到它居然修改了原始对象。增加了后期调试bug产生几率。

对于是否修改原对象,$.each,$.map都可以做到。
并且个人不推荐使用$.each,应尽量使用for...in 函数在js中的开销是比较大的。




谢谢你的细心,事实上,之前我对map和each这两个的区别理解的并不到位,这两者之间还是有几点差异的:
1. 当需要修改原数组时,使用map,而each常常会对应一个action(使用当前的item作为参数)
2. 两者的原型不同

一般而言,使用$.each是操作jquery包装集的,如果采用for..in可能带来一些代码的凌乱。另外,map应该指的是
映射,而不是抽取,虽然$.map确实可以做到抽取,呵呵。从这个角度来看,$.map的名字确实有点歧义。
0 请登录后投票
   发表时间:2012-02-10  
“凌乱的代码” 确实是啊。我的代码还是很凌乱。js真是太灵活了。还有我对jquery的一点看法:

最好在学会原生js,DOM之前,别用jquery。

可能引起一些不好的后果。jquery还是当成类库来用,最犀利的类库,作为框架它还不是很合适。
比如:判断俩个jquery对象是否是同一个标签
$("#name").is($("#name"));

或者
$("#name")[0]===$("#name")[0];


千万别:

$("#name")===$("#name");


jQuery还是比较难驾驭的。还有一点,jQuery的源码真漂亮
0 请登录后投票
论坛首页 Web前端技术版

跳转论坛:
Global site tag (gtag.js) - Google Analytics