zoukankan      html  css  js  c++  java
  • jQuery学习心得

    表示在document.ready时执行代码

    $(function(){
    	//1、取得要操作的对象(尽量只限制范围),如果对象多次使用要记得缓存
    	var $selector = $('selector');
    	var $target = $selector.find();
    	或者 var $target = $selector.children();
    	//2、通过find children parent closest filter等,进一步确定要操作的元素,有可能没有第二步
    	//eg1:要找id为abc的ul下的所有li
    	var $li = $("#abc").find("li");//better than $('#abc li')
    
    });
    

    1、粗略定位对象(选择器)$(str)

    2、精确找到对象 .find .parent

    3、基本属性或者样式操作 .attr .css 等

    4、迭代.each

    $lis = $('li');
    $lis.each(function(i,item){
    	$(item).xxxxxxx
    });
    
    

    5、绑定事件 .on .off .delegate .click....

    var $li = $('#abc').children('li');
    $li.css('color','black').click(function () {
    	$li.css('color','black');
    	$(this).css('color','red');
    });
    
    

    有一组ul#abc的孩子li,点击一个把这个奇数个变红,偶数个变蓝其它的是黑色

    var $lis = $('#abc').children('li');
    $lis.each(function (i) {
    	var $li = $(this);
    	$li.click(function (argument) {
    		$lis.css('color','black');
    		if(i % 2 === 0){
    			$li.css('color','red');
    		} else{
    			$li.css('color','blue');
    		}
    	});
    });
    
    

    1、迭代方法

    1-1、.each

    1-2、.map

    q1:map与each的区别
    each是自迭代,对自己进行遍历,然后返回自己
    map是对每一个元素执行函数,然后返回函数结果的数组

    var arr = [1,2,3];
    var ret = $.each(arr,function(i){
    	arr[i] = arr[i] + 1;
    });
    //arr = [2,3,4] ret = [2,3,4] arr === ret
    var ret = $.map(arr,function(i){
    	return arr[i] + 1;
    });
    //arr = [1,2,3] ret = [2,3,4] arr !== ret
    
    

    1-3、first 和 last 还有eq(n) slice分别是返回对象中的第一个,最后一个和第n个精确找到对象是对DOM元素的相关元素进行查找而first等是对对象本身进行查找

    first firstChild
    eg: ul>li
    first 得到的是一个ul
    firstChild 得到的是一组li
    

    2、精确找到对象

    Category: Traversing
    
    var tabs = $('#tab').children('li');
    var contents = $('#contents').children('div');
    
    //最优解是什么? 2l
    tabs.each(function(i){
    	var tab = $(this);
    	var target = contents.eq(i);
    	tab.click(function(){
    		tabs.removeClass('active');
    		tab.addClass('active');
    		contents.hide();
    		target.show();
    	});
    });
    
    

    // 1 + l(tab的数量)个 + N个 = N+ l

    tabs.each(function(i){
    	var tab = $(this);
    	tab.click(function(){
    		tabs.removeClass('active');
    		tab.addClass('active');
    		contents.hide().eq(i).show();
    	});
    });
    

    **//不要这么写N(用户点击的次数) * 2 + 1 + N = 3N **
    tabs.click(function(){
    $(this).addClass('active').siblings().removeClass('active');
    contents.hide().eq(tabs.indexOf(this)).show();
    });

    
    ###性能
    **其中属性和样式的方法没办法进行优化,其它方法是可以的,优先是这样的:**
    **迭代的速度 > 简单选择器的速度(id选择器) > 精确查找的速度 > 复杂选择器的速度**
  • 相关阅读:
    eval()函数的使用
    Ajax的GET,POST方法传输数据和接收返回数据
    使用目录
    安装目录
    c 文件输入和输出
    【C++王桂林】
    【C++】虚函数表vtable理解
    【C++】内存管理内幕阅读笔记
    git提交中的索引错误问题
    pydicom编辑、删除DICOM文件中病人相关信息
  • 原文地址:https://www.cnblogs.com/QingFlye/p/4330003.html
Copyright © 2011-2022 走看看