ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

前端(四)--jQuery

2022-07-18 09:02:40  阅读:159  来源: 互联网

标签:jQuery function 轮播 -- 前端 元素 选择器 节点 属性


1、jQuery的基本用法

1.1 jQuery引入

<script src="js/jquery-3.4.1.min.js" type="text/javascript"></script>

1.2 第一个jQuery测试

<script src="js/jquery-3.4.1.min.js" type="text/javascript"></script>
<script type="text/javascript">
    //jQuery的标准用法,只要记住:$就代表jQuery
    $(document).ready(function(){
        alert("今天是KH96班学习jQuery的第一天");
    });
</script>

1.3 $(document).ready()与window.onload的区别

<script type="text/javascript">
    function loadOne(){
        alert("LoadOne");
    }
    function loadTwo(){
        alert("loadTwo");
    }
    function loadThree(){
        alert("loadThree");
    }

    //onload的用法,页面加载完成后,调用函数,只能执行一个,且是最后指定的那个,特点:必须要等待网页元素全部加载才执行
    // window.onload = loadOne;
    // window.onload = loadTwo; //只有后面这个才有效

    //jQuery 的用法,页面结构加载完成后,调用函数,可以定义多个,互相不影响,且都可以执行
    //三个都可以执行
    $(document).ready(function(){
        loadOne();
    });

    //简化1
    $(document).ready(function(){
        loadTwo();
    });

    //简化 2   我们常用这种简化方式
    $(function(){
        loadThree();
    });

</script>

2、jQuery选择器

基本选择器的语法:$("选择器").action();

2.1 基本选择器

名称 语法 说明
标签选择器 element 选取指定标签名的元素
类选择器 .class 选取指定类名的元素
ID选择器 #id 选取指定id名的元素
并集选择器 selector1,selector2... 选取多种元素(里面可以是标签名,类名,id名)
全局选择器 * 选取所有元素

2.2 层次选择器

语法 说明
ancestor desscendant 后代选择器 A B
partn>child 子选择器 A>B
prev+next 相邻选择器 A+B
prev~siblings 同辈选择器 A~B

2.3 属性选择器

$("标签[属性]")

语法 说明
[attribute] 包含某属性
[attribute=value] 指定属性等于指定值
[attribute^=value] 指定属性以指定值开头
[attribute$=value] 指定属性以指定值结尾
[attribute*=value] 指定属性值包含指定参数值

2.4 过滤选择器

标签名:过滤选择器;

作用:过滤指定标签;

语法 说明
:first 选取第一个元素
:last 选取最后一个元素
:not(selector) 选取除selector选择了的元素之外的元素
:even 选取索引是偶数的元素(index从0开始)
:odd 选取索引是奇数的元素(index从0开始)
语法 说明
:eq(index) 选取索引等于index的元素
:gt(index) 选取索引大于index的元素
:lt(index) 选取索引小于index的元素
:header 选取所有标题元素(h1~h6) 注意 :header之前要有空格
:docus 选取当前获取焦点的元素
:animated 选取所有动画

可见性选择器

语法 说明
:visible 选取所有可见的元素 hidden()方法 隐藏
:hidden 选取所有隐藏的元素 show()方法 显示

2.5 jQuery选择器注意事项

选择器的书写规范很严格,多一个或少一个空格,都会影响选择器的效果;

2.6 $("选择器").css()

方法 说明
$("选择器").css("属性名称","属性值") 对单个css属性赋值
$("选择器").css({"属性名称":"属性值","属性名称":"属性值"}) 对多个css属性赋值

2.7 $(this).find("标签名")

$(this)就是将这个dom对象转换成jquery对象,就可以对这个对象进行操作

可以查找当前元素下的子元素;

html

//当鼠标访问指定的li时,指定的li下的p标签显示,鼠标移除后,对应的p消失
<ol>
     <li><span>3</span>三八线<p>加入看单</p></li>
    <li><span>4</span>吉详天宝<p>加入看单</p></li>
    <li><span>5</span>亲爱的翻译官<p>加入看单</p></li>
    <li><span>6</span>仙剑云之凡<p>加入看单</p></li>
    <li><span>7</span>权力的游戏第五季<p>加入看单</p></li>
    <li><span>8</span>琅琊榜<p>加入看单</p></li>
    <li><span>9</span>那年青春我们正好<p>加入看单</p></li>
    <li><span>10</span>乡村受情8(上)<p>加入看单</p></li>
</ol>

javascript

$("#play ol li").mouseover(function(){
	$(this).find("p").css({"display":"block"});
});
$("#play ol li").mouseleave(function(){
	$(this).find("p").css({"display":"none"}); //查找到当前元素的子元素
});


//还可以是使用:hidden 和 :visible  可见选择器
$("#play ol li").mouseover(function(){
    $(this).find("p:hidden").show();
});

$("#play ol li").mouseleave(function(){
    $(this).find("p:visible").hide();
});

$(this)表示当前元素,它还可以点出很多方法,需要的时候可以加个点看看有哪些;

常用方法

方法 说明
$(this).find("标签名") 当前标签下的指定标签
$(this).index() 当前标签的下标

3、jQuery基本操作

3.1 样式操作

方法(已声明好的外部样式类名,多个使用空格分割) 说明
addClass("样式类名") 添加样式
removeClass("样式类名") 移除样式
toggleClass("样式类名") 切换样式(就是添加和移除结合)可以与hover事件结合
hasClass("样式类名") 判断是否包含指定样式

3.2 内容操作

方法名 说明
html(context) 给指定元素添加网页内容(会编译标签) js->innerHTML
html() 获取指定元素的网页内容
text(context) 给指定元素添加网页内容(不会编译标签)js->innerText
text() 获取指定元素的网页内容

3.3属性值操作

方法 说明
val() 获取value属性的属性值
val(参数值) 设置value属性的属性值

3.3.1获取单选框的值

$('input:radio[name="IsAvail"]:checked').val()

3.4 节点操作

3.4.1 创造节点

$()用于获取或创建节点

方法 说明
$(element) 把DOM节点转化成jQuery节点
$(selector) 通过选择器获取节点
$(html) 使用HTML字符创建jQuery节点

3.4.2 插入节点

1 元素内部插入子节点

方法 说明
$(A).append(B) 将B节点追加到A节点的子节点中
$(A).appendTo(B) 将A节点追加到B节点的子节点中
$(A).prepend(B) 将B节点追加到A节点的子节点中
$(A).prependTo(B) 将A节点追加到B节点的子节点中

注意:jq中已经创建好的同一节点,多次执行插入,只会执行一次

var $node2 = $("<li>上海新增本土54例</li>");
$node2.appendTo($("ul")); //执行
//jq中已经创建好的同一节点,多次执行插入,只会执行一次
$node2.appendTo($("ul")); //不执行

//只用每次创建新的节点,才会多次执行
$("<li>罗永浩:那火烤中学高有问题</li>").prependTo($("ul"));//执行
$("<li>罗永浩:那火烤中学高有问题</li>").prependTo($("ul"));//执行

2 元素外部插入同辈节点

方法 说明
$(A).after(B) 将B节点追加到A节点之后
$(A).insterAfter(B) 将A节点追加到B节点之后
$(A).before(B) 将B节点追加到A节点之前
$(A).insertBefore(B) 将A节点追加到B节点之前

3.4.3 删除节点

方法 说明
remove() 删除当前整个节点
empty() 清空节点内容,节点还存在
detach() 删除整个节点,保留元素的绑定事件和附加的数据

3.4.4 替换节点

方法 说明
$(A)replaceWith(B) B节点替换A节点
$(A).replaceAll(B) A节点替换B节点

3.4.5 复制节点

方法 说明
clone(true) 复制节点及节点上的事件
clone(false) 复制节点但不复制节点上的事件

3.5属性操作

方法 说明
$("元素标签").attr("属性名") 获取指定属性的属性值
$("元素标签").attr("属性名","属性值") 设置指定属性的属性值
$("元素标签").attr({"属性名":"属性值","属性名":"属性值"}) 设置多个指定属性的属性值
removeAttr("属性名") 删除指定属性

3.6 节点遍历

3.6.1 遍历子元素

方法 说明
children() 获取元素的所有子元素
$(selector).children([expr]); 获取子元素的中的指定元素

3.6.2 遍历同辈元素

方法 说明
next() 获取当前元素后的第一个同辈元素
prev() 获取当前元素前的第一个同辈元素
slibings() 获取当前元素的所有同辈元素

3.6.3 遍历前辈元素

方法 说明
parent() 获取当前元素的父级元素
parents() 获取当前元素的所有祖先元素

3.6.4 each() 遍历

例子

//遍历所有的li元素
//隐式迭代:自动遍历集合中的所有元素
$("li").each(function(index,elm){
    alert(index);
    alert($(elm).html());
});

$("li").each(function(){
//注意:elm时dom元素对象,不可以直接使用jQuery方法,必须是转化为jQuery节点
    alert($(this).html()); //$(this)转换为jQuery节点
});

3.6.5 end()

结束当前链条中的最近的筛选操作,并将匹配元素集还原为之前的状态

//end():结束当前的最后一次筛选,恢复到初始状态
$(".gameList li").first().css("background-color","orange").end().last().css({"background-color":"pink"}); //可以选取到第一个li和最后一个li
//先选取第一个li,然后end()清除.first()的过滤,回到$(".gameList li"),在选取last()
//相当于两条语句:
/*
$(".gameList li").first().css("background-color","orange");
$(".gameList li").last().css({"background-color":"pink"});
*/

4、jQuery事件与特效

4.1 基础事件

4.1.1 鼠标事件

事件名称 说明
mouseover() 鼠标移入事件
mouseout() 鼠标移出事件
mouseenter() 鼠标移入事件
mouseleaver() 鼠标移出事件
hover() 鼠标移入和移出事件
click() 鼠标点击事件
dblclick() 鼠标双击事件
focus() 获取焦点事件
blur() 失去焦点事件

鼠标事件方法的区别

方法 相同点 不同点
mouseover() 鼠标进入被选元素时会触发 鼠标在其被选元素的子元素上来回进入时,触发
mouseenter() 鼠标进入被选元素时会触发 鼠标在其被选元素的子元素上来回进入时,不触发
mouseout() 鼠标离开被选元素是会触发 鼠标在其被选元素的子元素上来回离开时,触发
mouseleaver() 鼠标离开被选元素是会触发 鼠标在其被选元素的子元素上来回进入时,不触发

4.1.2 键盘事件

方法 说明
keydown() 键盘按下事件
keyup() 键盘弹起事件
keypress 产生可打印的字符事件

键盘按下灵活应用

//键盘按下事件,判断是否是enter键,并手动提交表单
$(document).keydown(function(even){
    if(even.keyCode == 13){
        if(confirm("确定要提交登录请求吗?")){
            alert("登录请求可以提交");
            //jQuery中手动提交表单
            $("form").submit();
        }else{
            alert("登录请求取消")
        }
    }
});

4.1.3 浏览器事件(了解)

4.1.4 window事件(了解)

4.1.5 表单事件(了解)

4.2 绑定事件和移出事件

4.2.1 绑定事件

方法 说明
bind() 绑定事件
4.2.1.1 绑定单个事件

bind(事件类型名,事件处理函数);

//对指定元素绑定mouseover事件
$(".on").bind("mouseover",function(){
    $(".topDown").show();
});
//对指定元素绑定mouseout事件
$(".on").bind("mouseout",function(){
    $(".topDown").hide();
});
4.2.1.2 绑定多个事件

bind({事件名称:事件处理函数,事件处理名称:事件处理函数。。。})

//对指定元素,绑定mouseover和mouseout事件
$(".on").bind({
    "mouseover":function(){
        $(".topDown").show();
    },
    "mouseout":function(){
        $(".topDown").hide();
    }
});

4.2.2 移除事件

方法 说明
unbind(); 解除指定元素绑定的所有事件
unbind(事件名); 解除指定元素绑定的指定事件

4.3 复合事件

4.3.1 hover

方法 说明
hover() 相当于mouseover和mouseout的集合,并支持切换
//复合事件:hover,相当于mouseover和mouseout的集合,并支持切换
$(".on").hover(function(){ 
    $(".topDown").show();
},function(){
    $(".topDown").hide();
});

4.3.2 toggle 1.9版本之后,移除了toggle()复合事件方法

方法 说明
toggle(函数。。。) 连续点击会切换函数
<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>连续点击,了解</title>
	</head>
	<body>
		<input type="button" value="切换颜色">
	</body>
	<script src="js/jquery-1.8.3.min.js"></script>
	<script type="text/javascript">
		$(function(){
			//连续点击:toggle(function1,function2...),随着鼠标的点击自动切换函数
			$("input[type=button]").toggle(
			function(){
				$("body").css("background-color","#f00");
			},
			function(){
				$("body").css("background-color","#0f0");
			},
			function(){
				$("body").css("background-color","#00f");
			}
			)
		});
	</script>
</html>

4.3.3 toggle(),toggle(函数),toggleClass()区别

方法 说明
toggle() 相当于show()和hidden()
toggle(函数) 复合事件 随着鼠标的点击自动切换函数
toggleClass(类名) 相当于addClas("类名"),removeClass()

4.4 jQuery 动画效果

4.4.1 控制元素的显示及隐藏

方法 说明
show() 立刻显示
show(毫秒数) 慢慢显示
show(毫秒数,函数) 在动画效果结束后执行函数
hide() 立刻隐藏
hide(毫秒数) 慢慢隐藏
hide(毫秒数,函数) 在动画效果结束后执行函数

toggle() 方法等于这两个方法

方法 说明
toggle() 立即显示和隐藏
toggle(毫秒数) 慢慢显示和隐藏
toggle(毫秒数,函数) 在动画效果结束后执行函数

参数:可以为任意毫秒数或,slow,normal,fast;

4.4.2 改变元素的透明度(淡入淡出)

方法 说明
fadeIn() 立即淡入
fadeIn(毫秒数) 淡入
fadeln(毫秒数,函数) 在动画效果结束后执行函数
fadeOut() 立即淡出
fadeOut(毫秒数) 淡出
fadeOut(毫秒数,函数) 在动画效果结束后执行函数

参数:可以为任意毫秒数或,slow,normal,fast;

4.4.3 改变元素高度(收缩)

方法 说明
slideDown() 立即延伸
slideDown(毫秒数) 慢慢延伸
slideDown(毫秒数,函数) 在动画效果结束后执行函数
slideUp() 立即收缩
slideUp(毫秒数) 慢慢收缩
slideUp(毫秒数,函数) 在动画效果结束后执行函数

参数:可以为任意毫秒数或,slow,normal,fast;

案例

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8">
		<title>动画-显示,隐藏,淡入淡出,收索,拉伸</title>
	</head>
	<body>
		<p>
			<img src="img/img01.jpg" alt="" width="600px" height="300px">
		</p>
		<input type="button" value="显示" id="showImg">
		<input type="button" value="隐藏" id="hideImg">
		
		<p>
			<img src="img/img02.jpg" alt="" width="600px" height="300px">
		</p>
		<input type="button" value="淡入" id="dadeIn">
		<input type="button" value="淡出" id="dadeOut">
		
		<p>
			<img src="img/img03.jpg" alt="" width="600px" height="300px">
		</p>
		<input type="button" value="延伸" id="slidedownImg">
		<input type="button" value="收缩" id="slideupImg">
		
	</body>
	<script src="js/jquery-3.4.1.min.js"></script>
	<script type="text/javascript">
		$(function(){
			//显示和隐藏:可以不带,带一个,带两个参数
			//第一个参数是执行显示或隐藏的速度或者隐藏的时长,单位是毫秒,如果为0,立刻执行
			//也可以是:slow,normal,fast,
			//第二个参数是执行显示或者隐藏效果完成后,需要执行的操作函数
			$("#showImg").click(function(){
				// $("img:eq(0)").show();//立刻显示
				$("img:eq(0)").show(5000);//慢慢显示,整个过程1秒,默认是从左上角显示
				
			});
			
			$("#hideImg").click(function(){
				// $("img:eq(0)").hide();//立刻显示
				$("img:eq(0)").hide(5000);
			});
			
			
			//淡入和淡出的动画效果,通过改变元素的透明度,实现淡入和淡出,带参数的效果和上面一样
			$("#dadeIn").click(function(){
				// $("img:eq(1)").fadeIn();//立刻淡入
				$("img:eq(1)").fadeIn(5000);//淡入
				
			});
			
			$("#dadeOut").click(function(){
				// $("img:eq(1)").fadeOut();//立刻淡出
				$("img:eq(1)").fadeOut(5000);//淡出
			});
			
			//通过改变元素的高度
			$("#slidedownImg").click(function(){
				// $("img:eq(2)").slideDown();//立刻延伸
				$("img:eq(2)").slideDown(5000);//延伸
				
			});
			
			$("#slideupImg").click(function(){
				// $("img:eq(2)").slideUp();//立刻收缩
				$("img:eq(2)").slideUp(5000);//收缩
			});
			
		})
	</script>
</html>

4.4.4 自定义动画(了解)

5、项目中常用的知识点

5.1 自定义表单验证 required

自定义表单的input标签必须添加required属性,否则就不会触发;

//自定义用户名校验提示语,对浏览器默认提示语,进行统一修改
$("input[type=submit]").click(function(){	
    var userName = document.getElementById("userName");
    if(userName.validity.valueMissing){
        userName.setCustomValidity("用户名不能为空")
    }else if(userName.validity.patternMismatch){
        //正则校验提示
        userName.setCustomValidity("用户名不符合规则校验")
    }else{
        userName.setCustomValidity("");
    }
    
});

5.2 return false 的理解和用法

当表单提交事件,接收到false的返回值不会再提交表单内容,可以实现去除表单的默认提交处理(让from的action失败),包括超链接;

$("form").submit(function(){
    // alert("监听表单提交事件");
    //提示是否确认登录请求
    if(!confirm("确认要进行登录吗?")){
    //当表单提交事件,接收到false的返回值不会在提交表单内容,可以实现去除表单的默认提交处理(让from的action失败),包括超链接
        return false;
    }
});

5.3 stop(true,true)

stop(true,true)停止匹配当前正在执行的动画效果,解决快速移入移出导致的延迟效果;

//二级导航栏的下拉特效
$(".wel_rhelp").bind({
    "mouseenter":function(){
     //stop(true,true) 停止匹配当前正在执行的动画效果,解决快速移入移出导致的延迟效果
      $(".wel_rhelp_ul").stop(true,true).slideDown(1000);
    },
    "mouseleave":function(){
        $(".wel_rhelp_ul").stop(true,true).slideUp(1000);
    }
});

5.4 轮播图

html

<!--焦点图-->
<div class="banner">
    <div class="top_slide_wrap">
        <ul class="slide_box ">
            <li class="active"><img src="img/ban1.jpg" width="700" height="401" /></li>
            <li><img src="img/ban2.jpg" width="700" height="401" /></li>
            <li><img src="img/ban3.jpg" width="700" height="401" /></li>
        </ul>
        <ul class="num">
            <li class="active">
                <a href="#">1</a>
            </li>
            <li class="">
                <a href="#">2</a>
            </li>
            <li>
                <a href="#">3</a>
            </li>
        </ul>
        <div class="op_btns">
            <div class="op_btns_1 clear">
                <a href="#" class="op_btn op_prev"></a>
                <a href="#" class="op_btn op_next"></a>
            </div>
        </div>
    </div>
</div>

javaScript

$(function(){
    //调用轮播函数
    playBanner();
});


//自定义轮播图播放函数
function playBanner(){
    //初始化图片序号变量
    var bannerIndex = 0;

    //初始化标识,当鼠标移入到轮播图数字上,暂停轮播
    var bannerFlog = false; //默认不暂停,当为true才暂停

    //获取要轮播的图片对象集合
    var $bannerImgs = $(".slide_box").children("li");
    //获取要轮播的图片对应数字集合
    var $bannerNums = $(".num").children("li");

    //1.当鼠标移入轮播图移入到对应的数字上,显示对应的轮播图
    $bannerNums.mouseover(function(){
        //确定移入的是哪个数字
        bannerIndex = $bannerNums.index($(this));
        // alert(bannerIndex);

        //让对应轮播图数字的图片进行淡入
        $bannerImgs.eq(bannerIndex).fadeIn();

        //所有当前轮播图数字外其他图片都要淡出
        $bannerImgs.eq(bannerIndex).siblings().fadeOut();

        //当前轮播图的数字要高亮 actice类是让数字高亮
        $(this).addClass("active");

        //所有当前轮播图数字外其他的数字都要取消高亮
        $(this).siblings().removeClass("active");

        //修改轮播图true,暂停
        bannerFlog = true;

    }).mouseout(function(){
        //修改轮播标识为false,继续自动轮播
        bannerFlog = false;
    });

    //开启自动轮播
    setInterval(function(){

        // 判断当前是不是鼠标在某个轮播图片的数字上,如果是,不可以切换图片,否则继续
        if(bannerFlog){
            return;
        }

        //默认从第一个图片开始轮播,轮播到最后一个图片,如果鼠标移入到某个图片,从当前的图片开始轮播
        bannerIndex++;

        //如果轮播图片序号大于轮播图片总数,代表轮播到最后,要从头开始
        if(bannerIndex >= $bannerImgs.length){
            bannerIndex = 0;
        }
        
        //切换轮播图片
        $bannerImgs.eq(bannerIndex).stop(true,true).fadeIn().siblings().fadeOut();
        
        //切换对应的轮播数字
        $bannerNums.eq(bannerIndex).stop(true,true).addClass("active").siblings().removeClass("active");

    },3000);
}

5.5 jQuery 判断checked的三种方法:

方法 说明
.attr(‘checked’); 看版本1.6+返回:”checked”或”undefined” ;1.5-返回:true或false
.prop(‘checked’); 16+:true/false
.is(‘:checked’); 所有版本:true/false//别忘记冒号哦

赋值

方法 说明
.attr(“checked”,”checked”); 赋值checked
.attr(“checked”,true); 赋值true

5.6 prop()方法的应用

prop() 方法设置或返回被选元素的属性和值

prop(参数1,参数2):

  1. 参数1用于设置属性
  2. 参数2设置属性值
    下面一个简单的案例来应用一下这个方法:

全选和反选

head部分

<script src="lib/jquery/jquery-3.4.1.min.js"></script>
	<link rel="stylesheet" href="lib/bootstrap/css/bootstrap.css">
	<style>
	.wrap {
		width: 500px;
		height: 300px;
		margin: 50px auto;
	}
	th {
		text-align: center;
	}
    </style>

body部分

<div class="wrap">
		<table class="table table-striped table-bordered table-hover text-center">
			<thead>
				<tr class="success">
					<th><input type="checkbox" id="min_check"></th>
					<th>语文</th>
					<th>数学</th>
					<th>英语</th>
				</tr>
			</thead>
			<tbody id="t_body">
				<tr>
					<td><input type="checkbox"></td>
					<td>55</td>
					<td>66</td>
					<td>61</td>
				</tr>
				<tr>
					<td><input type="checkbox"></td>
					<td>68</td>
					<td>23</td>
					<td>58</td>
				</tr>
				<tr>
					<td><input type="checkbox"></td>
					<td>35</td>
					<td>35</td>
					<td>88</td>
				</tr>
				<tr>
					<td><input type="checkbox"></td>
					<td>36</td>
					<td>58</td>
					<td>21</td>
				</tr>
			</tbody>
		</table>
	</div>
	<script>
		$(function(){
			// 需求1:当点击全选按钮的时候,下面的四个按钮也被选中
			$("#min_check").click(function(){
				$("#t_body input:checkbox").prop("checked",$(this).prop("checked"));
			});
			//需求2:当下面按钮有一个没被选中,上面的全选按钮也取消选中状态
			$("#t_body input:checkbox").click(function(){
				if($("#t_body input:checkbox").length === $("#t_body input:checked").length){
					$("#min_check").prop("checked",true);
				}else {
					$("#min_check").prop("checked",false);
				}
			});
		});
	</script>

标签:jQuery,function,轮播,--,前端,元素,选择器,节点,属性
来源: https://www.cnblogs.com/xiaoqigui/p/16489183.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有