daiweishuai

git remote add origin git@github.com:daiweishuai/note.git# jQuery

html 与 text 方法

//html()相当于js中的innerHTML
//text()相当于js中的innertext

//html()设置
$("div").html("<span>这是一段内容</span>");
//html()获取
$("div").html();
//text()设置
$("div").text("这是一段内容");
//text()获取
$("div").text();

区别:

html()会识别标签,text()不会识别标签,会把内容直接当成字符串.

css 样式设置和获取

//获取宽(获得的是带px的值)
$("div").css("width");
//设置(值可以是字符串加px,也可以直接是数值不加引号)
$("div").css("width", "400px");
$("div").css("width", 400);

width 与 height 方法

//获取width(得到的值都是数值,不含px)
console.log($("div").width()); //width
console.log($("div").innerWidth()); //width+padding
console.log($("div").outerWidth()); //width+padding+border
console.log($("div").outerWidth(true)); //width+padding+border+margin

//设置width
$("div").width(400);
$("div").width("400");
$("div").width("400px");

//需要获取页面可视区域的宽度和高度
//当调整浏览器窗口的大小时,发生 resize 事件。
$(window).resize(function () {
  console.log($(window).width());
  console.log($(window).height());
});

scrollTop 与 scrollLeft 方法

设置或者获取垂直滚动条的位置

//获取页面被卷曲的高度
$(window).scrollTop();
//获取页面被卷曲的宽度
$(window).scrollLeft();

//当用户滚动指定的元素时,会发生 scroll 事件。
//scroll 事件适用于所有可滚动的元素和 window 对象(浏览器窗口)。
$(window).scroll(function () {
  //获取
  console.log($(window).scrollTop());
  console.log($(window).scrollLeft());
});

案例 小火箭返回顶部案例

$(".actGotop").click(function () {
  //动画到顶部
  $("html,body").stop().animate({ scrollTop: 0 }, 3000); //chrome支持html 不支持body. IE6 7 8 支持body.
  //没有过度,直接到顶部
  //$(window).scrollTop(0);

  //虽然说window对象中没有scrollTop属性,但scrollTop是jq封装好的方法,封装后是可以用的.window对象应该用pageYOffset属性,但pageYOffset属性是只读的,不能设置.
});

offset 与 position 方法

offset 方法获取元素距离 document 的位置,position 方法获取的是元素距离有定位的父元素的位置。position 不能传参数设置,是只读属性.

//offset是一个对象,里面存的是该元素外边界到document的距离(都是数值,没有px单位)
//返回值为对象{left:100,top:100}
console.log($(".son").offset());
//position是该元素外边界到该元素最近的有定位的父元素border内边界的距离(都是数值,没有px单位)
console.log($(".son").position().left);

jQuery 事件机制

jQuery 对 js 事件进行了封装,增加并扩展了事件处理机制.

jQuery 事件发展历程

简单事件绑定>>bind 事件绑定>>delegate 事件绑定>>on 事件绑定(推荐)

简单事件注册:

click(handler)     单击事件
mouseenter(handler)  鼠标进入事件
mouseleave(handler)  事件离开事件

缺点:不能注册多个事件

bind 方式注册事件

//第一个参数:事件类型
//第二个参数:事件处理程序
//多种事件共用一种函数
$("p").bind("click mouseenter", function () {
  //事件响应方法
});
//每种事件用各自的函数
$("p").bind({
  click: function () {
    alert("呵呵");
  },
  mouseenter: function () {
    alert("哈哈");
  },
});

缺点:不支持动态事件绑定

delegate 委托事件

给父元素注册委托事件,最终还是子元素来执行

//第一个参数:selector,事件最终由谁来执行
//第二个参数:事件的类型
//第三个参数:函数,要做什么
$("div").delegate("p", "click", function () {
  console.log(this);
  //为div下面的所有的p标签绑定事件
  //这里面的this是指的子元素p标签,不是指的父元素div标签.
});

缺点:只能注册委托事件,因此注册事件需要记得方法太多了

on 注册事件

jQuery1.7 之后,jQuery 用 on 统一了所有事件的处理方法。

最现代的方式,兼容 zepto(移动端类似 jQuery 的一个库),强烈建议使用。

// 第一个参数:events,绑定事件的名称可以是由空格分隔的多个事件(标准事件或者自定义事件)
// 第二个参数:selector, 执行事件的后代元素(可选),如果没有后代元素,那么事件将有自己执行。
// 第三个参数:data,传递给处理函数的数据,事件触发的时候通过event.data来使用(不常使用)
// 第四个参数:handler,事件处理函数
$(selector).on(events[,selector][,data],handler);
//div的委托事件,由子元素p执行
//委托事件里面的this是p标签,不是div标签
$("div").on("click", "p", function () {
alert("呵呵")
});

//给自己注册的事件
$("#btn").on("click", function () {
$("<p>我是新建的p元素</p>").appendTo("div");
});

事件解绑

unbind 方式(不用)

$(selector).unbind(); //解绑所有的事件
$(selector).unbind("click"); //解绑指定的事件

undelegate 方式(不用)

$( selector ).undelegate(); //解绑所有的delegate事件
$( selector).undelegate( “click” ); //解绑所有的click事件

off 方式(推荐)

// 解绑匹配元素的所有事件
$(selector).off();
// 解绑匹配元素的所有click事件
$(selector).off("click");

触发事件

//1.
$(selector).click(); //触发 click事件
//2.
$(selector).trigger("click");
//1.第一种
$("#btn").click(function(){
$("p").click();
});
//2.第二种,使用trigger方法
$("#btn").on("click", function () {
$("p").trigger("click");//会触发四次是因为有四个p标签
});

jQuery 事件对象

jQuery 事件对象其实就是 js 事件对象的一个封装,处理了兼容性。

//screenX和screenY	对应屏幕最左上角的值
//clientX和clientY	距离页面左上角的位置(忽视滚动条)
//pageX和pageY	距离页面最顶部的左上角的位置(会计算滚动条的距离)

//event.keyCode	按下的键盘代码
//event.data	存储绑定事件时传递的附加数据

//event.stopPropagation()	阻止事件冒泡行为
//event.preventDefault()	阻止浏览器默认行为
//return false:既能阻止事件冒泡,又能阻止浏览器默认行为。
例子:
$("a").on("click",function(e){
alert("hehehe");

//看情况来用单独的阻止事件冒泡或者阻止浏览器默认跳转
//阻止浏览器默认跳转
e.preventDefault();
//阻止事件冒泡       cancelBubble=true是专门针对IE的阻止冒泡事件,在jq中不能用,做兼容给了stopPropagation();
e.stopPropagation();
//return false;//既能阻止事件冒泡也能阻止浏览器默认跳转
});

//增加事件冒泡
$("body").on("click",function(){
alert("嘻嘻嘻");
});

链式编程

通常情况下,只有设置操作才能把链式编程延续下去。因为获取操作的时候,会返回获取到的相应的值,无法返回 jQuery 对象。

end(); // 筛选选择器会改变jQuery对象的DOM对象,想要恢复到上一次的状态,并且返回匹配元素之前的状态。

例子:五角星评分案例

var wjx_k = "☆";
var wjx_s = "★";
//鼠标移入事件
$(".comment>li").on("mouseenter", function () {
  //移入的和移入之前的都变实心
  $(this).text(wjx_s).prevAll().text(wjx_s);
  //移入的后面的变空心
  $(this).nextAll().text(wjx_k);

  //$(this).text(wjx_s).prevAll().text(wjx_s)加入移入的是第三个五角星,现在的jq对象变成了前两个五角星的集合了,如果再nextAll()
  //的话,会分别求第一个五角星的nextAll()是后四个五角星集合的对象,第二个五角星的nextAll()是后三个五角星集合的对象,加起来是后四个五角星集合的对象.
  //并不是最后两个.

  //end()可以把jq对象回退到上一个.
  //$(this).text(wjx_s).prevAll().text(wjx_s).end().nextAll().text(wjx_k);
});

//鼠标移出事件
$(".comment").on("mouseleave", function () {
  //所有的五角星变空心
  $("li").children().text(wjx_k);
  //找到current,把current属性的li和之前的li都变成实心
  $("li.current").text(wjx_s).prevAll().text(wjx_s);
});
//鼠标点击事件,当前点击的li加一个class或者属性,排除其他的class或者属性
$(".comment>li").on("click", function () {
  $(this).addClass("current").siblings().removeClass("current");
});

each 方法

jQuery 的隐式迭代会对所有的 DOM 对象设置相同的值,但是如果我们需要给每一个对象设置不同的值的时候,就需要自己进行迭代了。

作用:遍历 jQuery 对象集合,为每个匹配的元素执行一个函数

// 参数一表示当前元素在所有匹配元素中的索引号
// 参数二表示当前元素(DOM对象)
$(selector).each(function(index,element){});

例子:

// var lis = $("li");
// for(var i = 0; i<lis.length; i++){
//     $("li").eq(i).css("opacity",(i+1)/10);
// }

//each方法遍历
$("li").each(function (index, element) {
  $("li")
    .eq(index)
    .css("opacity", (index + 1) / 10);
});

多库共存

jQuery使用$作为标示符,但是如果与其他框架中的$冲突时,jQuery可以释放$符的控制权.
var c = $.noConflict();//释放$的控制权,并且把$的能力给了c

例子:

//如果引入的jq和别的js库冲突,jq在引入别的库下面,就可以先把$符号释放掉换成别的名字,先使$供别的库使用.
//在jq中的$一直就有一个备胎的名字jQuery,改不改别的名字,jQuery一直都可以使用
//入口函数也可以写成 jQuery(function(){});

//如果引入的jq在别的库上面,那此时的$已经是别的库中的$了.就不能调用noConflict改名或者释放$了.
console.log($); //未改名之前$是jq的
var $$ = $.noConflict(); //把jq的$改名为$$
console.log($); //输出此时的$,现在是itcast库的$
Last Updated 6/28/2025, 9:01:29 AM