jQ笔记

368 阅读3分钟

jQ笔记


jQ对象和DOM对象互换

1.DOM->jQ: $(DOM对象)

$('div')

2.jQ对象转换为DOM对象(两种方式):由于[jQ对象是伪数组的形式存储数据的]

(1) $('div')[index],index0

(2) $('div').get(index) index是索引号

jQ层级层级选择器和css层级选择器是一致的


jQ对象不能使用style,因为它是jQ对象的,不是dom对象


隐式迭代:

jQ内部会把匹配的所有元素内部进行遍历循环,每一个元素都会添加css这个方法

jQ筛选选择器

:first

:last

:eq(index)

:odd

:even


jQ筛选方法

parent() 最近一级的父级

children(selector) 只找最近一级儿子->亲儿子,等价于:ul>li

find(selector) 找全部符合选择器的元素,不写就找全部

siblings(selector) 找兄弟,不包括自身

nextAll() 找之后的所有同辈元素

prevAll() 找之前的所有同辈元素

hasClass(class) 检查当前元素是否含有某个特定的类,如果有,则返回true

eq(index) 相当于$("li:eq(2)"), index从0开始,这个方法更推荐,可以放入变量,不用拼接字符串


jQ排他思想:

使用了隐式迭代实现->siblings(selector) 找兄弟,不包括自身

jQ链式编程

有点像java流式编程,可以一直点
需要注意真正变化的到底是那个,否则容易出错

jQ修改&操作css的方法

$("div").css("width", 300);//跟数字则不用加单位和双引号
$("div").css({
    width: 400,
    heigth: 400,
    backgroundColor: "red"
    //如果是符合名字的属性则必须采取驼峰命名法,不是数字则需要加引号
});

jQ修改样式操作类,做到尽量不用操作css文件,直接用jq添加类,非常方便

1.添加类 addClass()
    $("div").click(function(){
       $(this).addClass("current");
    });
2.删除类 removeClass()
    ...
3.切换类 toggleClass("current") 有则删除,没有则加上
    ...

补充:
    transition: all 0.5s      转换在0.5秒完成
    transform: rotate(360deg) 旋转360°

jQ类操作于className区别

原生js中的className会覆盖元素原先里面的类名,jQ只会对指定类进行操作,不影响原先的类名。

jQ效果:封装了很多效果

  • 显示隐藏:show() / hide() / toggle() ;
  • 划入画出:slideDown() / slideUp() / slideToggle() ;
  • 淡入淡出:fadeIn() / fadeOut() / fadeToggle() / fadeTo() ;
  • 自定义动画:animate() ;

注意:

动画或者效果一旦触发就会执行,如果多次触发,就造成多个动画或者效果排队执行。 jQuery为我们提供另一个方法,可以停止动画排队:stop() ;

显示隐藏:show() / hide() / toggle()

1.show([speed,[easing],[fn]])

2.hide([speed,[easing],[fn]])

3.toggle([speed,[easing],[fn]])

    speed: slow normal fast 或者毫秒数

    easing: 默认swing, 可用 linear

    fn:回调函数

一般情况不用,直接隐藏或切换就行


滑动:

slideDown() / slideUp() / slideToggle()

参数与上面三个一摸一样


事件切换:

1.hover 就是鼠标经过和离开的复合写法->查看05.html

动画队列及其停止排队方法

1.动画或效果队列

2.停止排队:停止短时间内重复触发的动画,只执行最后一次 .stop()


淡入淡出效果

fadeIn() / fadeOut() / fadeToggle() / fadeTo() 参数才是和上面的一样...

调整透明度:

fadeTo([[speed],opactity,[easing],[fn]])

opacity 是 0-1之间


自定义动画 animate

animate(params, [speed],[easing],[fn])
    1.params: 想要更改的样式属性,以对象形式传递,必须写.属性名可以不带引号
    其他与上面一样

案例:王者手风琴案例


jQ属性操作

  1. prop(): 获取或设置元素固有属性值,用 prop()

    注意: prop()的返回值是 布尔类型

     如:<a>里面的href,<input>里面的type
         *获取: $("a").prop("href");
         *设置: $("a").prop("href","www.baidu.com");
    
     补充:
     .change([fn])方法:当某个对象发生变化时,则可以调用回调函数
    
  2. attr("属性"): 获取元素的自定义属性 我们通过 attr("属性") //类似原生getAttribute()

     设置属性语法: attr("属性","属性值")  //似原生setAttribute()
    

    还可以获取原H5自定义属性

3.数据缓存 data() 这个里面的数据是存放在元素的内存里面

把元素当作内存一样,存储在浏览器中,但是在html中是找不到的,可以在application中找

这个方法获取data-index h5自定义属性 第一个 不用写data-  而且返回的是数字型

jQ全选案例

思路:

  1. 里面3个小复选框按钮的选中状态跟着全选按钮走

  2. checked是复选框的固有属性,则需要prop()方法获取和设置该属性

  3. 把全选按钮状态赋值给3个小复选框就可以了

  4. 当我们每次点击小的复选框按钮,就来判断:

  5. 如果小复选框被选中的个数等于 n(3) 就应该把全选按钮选上,否则全选按钮不选

  6. :checked 选择器 :checked查找被选中的表单元素


jQ内容文本值

1.获取/设置->普通元素内容 html() -----> 相当于原生.innerHTML (注意:属性来的)

.html()          [获取]内容
.html("内容")     [设置]元素的内容

2.获取/设置->普通元素文本内容 text() -----> 相当于原生.innerText

.text()              [获取]元素文本内容
.text("文本内容")     [设置]元素的文本内容

3.获取/设置->表单的值 val() -----> 相当于原生.value

console.log($("input").val());
$("input").val("123");

jQ案例

购物车,增减商品数量

1.声明一个变量,当点击+号increment,就让这个值++,然后赋值给文本框

2.注:只能增加本商品的数量,就是当前+号的兄弟文本框(itxt)的值

3.修改表单的值是val()方法

4.注:这个变量初始值应该是这个文本框的值,在这个值的基础上++,所以要先获取表单的值再++

5.减号相同,但是不能小于1

细节: 
    .val()返回值类型是字符串,===是类型都要一样,
        要是===就一直是false判断,不会进入if里面执行.

购物车:小计功能

1.每次点击+号或-号,根据文本框的值乘以 当前商品的价格,就是商品的小计

2.只能增加商品的小计,就是当前商品的小计模块(p-sum)

3.修改普通元素的内容是text()方法

4.当前商品的价格,要把¥符号去掉再相乘, 截取字符串substr(1)

4.1.添加内容

5.parents('选择器') 可以返回指定祖先元素 我淦!

6.最后的计算结果可以用 .toFixed(2) 来保留两位小数

7.用户也可以直接修改表单里面的值,同样要计算小计

8.用[最新的表单内的值] 乘以单价即可,但是还是当前商品小计


jQ元素操作

1.遍历元素

$("selector").each()

jQ隐式迭代是对同一类元素做了同样的操作,如果想要给同一类元素做不同操作,就需要用到遍历

$("div").each(function(index, domEle){
    xxx;
    ...
});

    回调函数中的index是每个元素的索引号,
    [domEle是每个DOM元素对象,不是jQ对象,]
所以向要使用jQ方法,需要给这个DOM元素转换为jQ对象: $(domEle)
        

2.遍历元素 法二, 主要用于遍历数据,和[[处理数据]]

    任何对象可以是数组,对象等
    $.each(任何对象, function(i, ele){
        xxx;
        ...
    });

3.创建元素

    $("<li></li>");
    动态的创建一个<li>
    

4.添加元素

内部添加

最后添加 .append()
最前面添加 .prepend()

外部添加:放到目标元素前面&后面

后面添加 element.after("内容")
前面添加 element.before("内容")

内部添加是父子关系

外部添加是兄弟关系

5.删除元素

element.remove()
删除匹配的元素(本身)

element.empty()
删除匹配的元素集合中所有的子杰点

element.html("")
清空匹配的元素内容


jQ案例: 计算总计和金额

1.把所有文本框内的值相加就是总计数量,总额同理

2.文本框内值不同,所以想要相加则用到each遍历,声明一个变量,相加即可

3.点击+-号,都会改变总计和总额的,以上2个操作调用这个函数即可

4.注:

总计是文本框里面的值相加的, 用val();

总额 是普通元素内容,用text();

5.还要注意类型转换


jQ案例: 选中商品添加背景

思路:

1.选中的商品添加背景,不选中移除背景即可

2.全选按钮点击: 如果选中全选,则所有的商品添加背景,否则移除背景

3.小的复选框: 如果是选中状态,则当前商品添加背景,否则移除背景


事件注册

单个事件注册

$("div").click(function(){ 事件处理程序 });

其他事件和原生基本一致
    
mouseover 鼠标移入、
mouseout 鼠标移出、
blur 失去焦点、
focus 获得焦点、
change 值改变、
keydown 键盘按下、
keyup 键盘回弹、
resize 大小改变、
scroll 滚动条
    等

事件处理

jQ使用.on(events,[selector],[data],fn)

在选择元素上绑定一个或多个事件的事件处理函数。

事件绑定: 事件处理程序到当前选定的jQuery对象中的元素。on()方法

1.事件原生处理
$("div").click(function () {
        $(this).css("background", "pink");
});

2.事件jQ处理 使用.on(),方式多种
每个事件对应不同的函数,则使用这个方式
$("div").on({
        mouseenter: function () {
            $(this).css("background", "skyblue");
        },
        click: function () {
            $(this).css("background", "purple");
        },
        mouseleave: function () {
            $(this).css("background", "blue");
        }
});

3.当触发以下两个(可以或以上)事件的时候,都执行这个回调函数
不同事件,相同函数,可以使用这个方式
$(function () {
    $("div").on("mouseenter mouseleave", function () {
            $(this).toggleClass("current");
    });
});


4.事件委派(委托):把原来加给子元素身上的事件绑定在父元素上,父元素操作子元素,就是把事件委派给父元素
第二个参数一定是它的子元素
$("ul").on("click","li",function(){
    alert("hello world!");
});
click是绑定在ul身上的,但是触发的对象是ul里面你的小li

5.on也可以给未来(还没创建)动态创建的元素绑定事件
不使用.on()的话,只能绑定之前加入的li,之后的不会绑定
$("ol li").click(function () {
        alert(11);
});

使用.on()可以囊括动态创建的元素
$("ol").on("click", "li", function () {
        alert(11);
});
let li = $("<br><li>后来创建的</li>");
$("ol").append(li);

$(function () {
    //1.点击发布,动态创建一个小li,放入文本框的内容和删除按钮,并且添加到ul中
    $(".btn").on("click", function () {
            let li = $("<li></li>");
            li.html($(".txt").val() + "<a href='javascript:;'> 删除</a>");
            $("ul").prepend(li);
            li.slideDown();
            $(".txt").val("");
    });
    
    //2.点击删除按钮可以当前微博的留言,此时使用普通的添加事件,是不能绑定上事件的,需要使用on
    //回顾: on只能加在父元素上,来控制子元素, 可以给动态创建的元素绑定事件
    /*
    on方法的用法:
            $("selector").on([event], [element], [fu]);
     */
    $("ul").on("click", "a", function () {
            //a的父亲是li
            $(this).parent().slideUp(function () {
                    $(this).remove();
            });
    });
    //js函数的特点: 少了参数也没关系,还是可以继续执行
});

事件解绑

$("div").on({
        mouseenter: function () {
                $(this).css("background","purple");
        },
        mouseleave: function (){
                $(this).css("background","green");
        }
},);

$("ul").on("click", "li", function () {
        alert(111);
})
//事件解绑 .off()
//1.不传参数则解除所有的事件
//$("div").off();

//2.指定解绑
//$("div").off("click");

//3.解除事件委托
$("ul").off("click", "li");

//4. one()事件只能触发一次
$("p").one("click", function () {
        alert(11);
});

自动触发事件 trigger()


事件对象