【jQuery】属性操作以及元素操作(超便利)& 购物车案例模块实现(全流程)

目录

素材已上传至仓库:https://gitee.com/liu-yihao-hhh/j-query-study/tree/master/jQuery-02

1. jQuery属性操作

1.1  设置或获取元素固有属性值 prop()

1.2  设置或获取元素自定义属性值 attr()

1.3  数据缓存 data()

2. jQuery 内容文本值

2.1 遍历元素

2.2 创建元素

2.3 添加元素

2.4 删除元素

总结不易~ 本章节对我有很大的收获,希望对你也是~~~~


素材已上传至仓库:https://gitee.com/liu-yihao-hhh/j-query-study/tree/master/jQuery-02

1. jQuery属性操作

1.1  设置或获取元素固有属性值 prop()

所谓元素固有属性就是元素本身自带的属性,比如 <a> 元素里面的 href ,比如 <input> 元素里面的 type。

1. 获取属性语法

prop(''属性'')

2. 设置属性语法

prop(''属性'', ''属性值'')

1.2  设置或获取元素自定义属性值 attr()

用户自己给元素添加的属性,我们称为自定义属性。 比如给 div 添加 index =“1”。

1. 获取属性语法

attr(''属性'')      // 类似原生 getAttribute()

2. 设置属性语法

attr(''属性'', ''属性值'')   // 类似原生 setAttribute()

 

1.3  数据缓存 data()

data() 方法可以在指定的元素上存取数据,并不会修改 DOM 元素结构。一旦页面刷新,之前存放的数据都将被移除。

1. 附加数据语法

data(''name'',''value'')   // 向被选元素附加数据  

2. 获取数据语法

date(''name'')             //   向被选元素获取数据  

    $(function () {
      // 1. element.prop("属性名") 获取属性值
      // prop获取元素固有的属性值
      console.log($("a").prop("href"))
      // 设置属性值
      $("a").prop("title", "我们都挺好")

      // 观察复选框checked是否被选中
      $("input").change(function () {
        // prop 获取某一个表单的属性值
        console.log($(this).prop("checked"))
      })

      // 2. index是自定义属性 不能通过prop来获取 而是通过attr来获取
      // console.log($("div").prop("index"))
      console.log($("div").attr("index"))  // <div index="1" data-index="2">我是div</div>
      $("div").attr("index", "4")  // <div index="4" data-index="2">我是div</div>
      $("div").attr("data-index", "55")  // <div index="4" data-index="55">我是div</div>

      // 3. 数据缓存data() 这个里面的数据是存放在元素的内存里面的
      $("span").data("uname", "andy")
      // 可以简单理解就是把这个元素当作一个变量来看 然后把这个元素放到内存里面存起来
      // 在控制台是看不到这个变量的
      console.log($("span").data("uname"))  // andy
      // 这个方法获取data-index h5自定义属性 第一个 不用写data- 而且返回的是数字型
      console.log($("div").data("index"))  // 55
    })

    2. jQuery 内容文本值

    1. 普通元素内容 html()( 相当于原生innerHTML)

    html()             // 获取元素的内容

    html(''内容'')   // 设置元素的内容

    2. 普通元素文本内容 text()   (相当与原生 innerText)

    text()                     // 获取元素的文本内容

    text(''文本内容'')   // 设置元素的文本内容

    3. 表单的值 val()( 相当于原生value)

    val()              // 获取表单的值

    val(''内容'')   // 设置表单的值

        // 1. 获取设置元素内容 html()
        console.log($("div").html()) // 把标签跟文本内容一起获取  <span>我是内容</span>
        $("div").html("123") // 这里可以对内容进行修改 有innerHTML的作用
    
        // 2. 获取设置元素文本内容 text()
        console.log($("div").text()) // 只获取文本内容 不会获得标签  123
        $("div").text("456") // 也可以对内容进行修改 
    
        // 3. 获取设置表单值 val()
        console.log($("input").val()) // 注意 val值 只存在表单当值 表单 input
        $("input").val("123") // 把表单里面的 默认值 修改成 123

    返回指定祖先元素

        console.log($(".four").parent().parent().parent())
        // parens 返回所有的祖先元素
        console.log($(".four").parents())
        console.log($(".four").parents(".one"))

    2.1 遍历元素

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

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

    1. each() 方法遍历匹配的每一个元素。主要用DOM处理。 each 每一个
    2. 里面的回调函数有2个参数:  index 是每个元素的索引号;  demEle 是每个DOM元素对象,不是jquery对象
    3. 所以要想使用jquery方法,需要给这个dom元素转换为jquery对象  $(domEle)

    $.each(object,function (index, element) { xxx; })      

    1. $.each()方法可用于遍历任何对象。主要用于数据处理,比如数组,对象
    2. 里面的函数有2个参数:  index 是每个元素的索引号;  element  遍历内容
        $(function () {
          $("div").css("color", "red")
          //如果针对于同一元素做不同操作 需要用到遍历元素 (类似for 但是比for强大)
          // 1. each() 方法遍历元素
          $("div").each(function (index, domEle) {
            // 回调函数第一个参数一定是索引号 可以自己指定索引号名称
            let sum = 0
            let arr = ["red", "blue", "green"]
            console.log(index)
            // 第二个参数 一定是 DOM元素对象
            console.log(domEle)
            // domEle.css("color") // 注意因为这是一个DOM对象 DOM对象是没有css方法的
            // 将DOM对象转换成jQuery对象
            $(domEle).css("color", "blue")
    
            $(domEle).css("color", arr[index])
    
            sum += parseInt($(domEle).text())
            console.log(sum)
    
            // each很好的遍历数组
            // 2. $.each() 方法遍历元素 主要用于遍历数据 处理数据
            $.each($("div"), function (i, ele) {
              console.log(i)
              console.log(ele)
            })
            $.each(arr, function (i, ele) {
              console.log(i)
              console.log(ele)
            })
    
            $.each({ name: "andy", id: 2, city: "wuhan" }, function (i, ele) {
              console.log(i)
              console.log(ele)
            })
          })
    
    
        })

    2.2 创建元素

    $(''<li></li>'');    

    动态的创建了一个 <li>  

    2.3 添加元素

    1. 内部添加

    element.append(''内容'')  

    把内容放入匹配元素内部最后面,类似原生 appendChild。

    element.prepend(''内容'')  

    把内容放入匹配元素内部最前面。

    2. 外部添加

    element.after(''内容'')        //  把内容放入目标元素后面

    element.before(''内容'')    //  把内容放入目标元素前面

    1. 内部添加元素,生成之后,它们是父子关系。
    2. 外部添加元素,生成之后,他们是兄弟关系。

    2.4 删除元素

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

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

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

    1. remove 删除元素本身。
    2. empt() 和  html('''') 作用等价,都可以删除元素里面的内容,只不过 html 还可以设置内容。
        $(function () {
          // 1. 创建元素
          let li = $("<li>我是后来创建的li</li>")
    
          // 2. 添加元素
          // 1) 内部添加
          $("ul").append(li) // 内部添加并且放到内容的最后面
          $("ul").prepend(li) // 内部添加并且放到内容的最前面
    
          // 2)外部添加
          let div = $("<div>我是后妈生的</div>")
          $(".test").after(div) // 外部添加 放到该DOM元素的后面
          $(".test").before(div) // 外部添加 放到该DOM元素的前面
    
          // 3. 删除元素
          $("ul").remove(); // 可以删除匹配的元素 自杀
          $("ul").empty(); // 可以删除匹配元素的子节点 孩子 本身的元素是不删掉的
          $("ul").html(""); // 可以删除匹配的元素里面的子节点 孩子 不删除本身元素
    
        })

    • 案例:购物车案例模块-全选分析

    素材自取:https://gitee.com/liu-yihao-hhh/j-query-study/tree/master/jQuery-02/02-%E8%B4%AD%E7%89%A9%E8%BD%A6

    1. 全选思路:里面3个小的复选框按钮(j-checkbox)选中状态(checked)跟着全选按钮(checkall)走。
    2. 因为checked 是复选框的固有属性,此时我们需要利用prop()方法获取和设置该属性。
    3. 把全选按钮状态赋值给3小复选框就可以了。
    4. 当我们每次点击小的复选框按钮,就来判断:
    5. 如果小复选框被选中的个数等于3 就应该把全选按钮选上,否则全选按钮不选。
    6. :checked 选择器      :checked 查找被选中的表单元素。

    • 购物车案例模块-增减商品数量分析
    1. 核心思路:首先声明一个变量,当我们点击+号(increment),就让这个值++,然后赋值给文本框。
    2. 注意1: 只能增加本商品的数量, 就是当前+号的兄弟文本框(itxt)的值。
    3. 修改表单的值是val() 方法
    4. 注意2: 这个变量初始值应该是这个文本框的值,在这个值的基础上++。要获取表单的值
    5. 减号(decrement)思路同理,但是如果文本框的值是1,就不能再减了。

    • 购物车案例模块-修改商品小计分析
    1. 核心思路:每次点击+号或者-号,根据文本框的值 乘以 当前商品的价格  就是 商品的小计
    2. 注意1: 只能增加本商品的小计, 就是当前商品的小计模块(p-sum)  
    3. 修改普通元素的内容是text() 方法
    4. 注意2: 当前商品的价格,要把¥符号去掉再相乘 截取字符串 substr(1)
    5. parents(‘选择器’) 可以返回指定祖先元素  
    6. 最后计算的结果如果想要保留2位小数 通过 toFixed(2)  方法
    7. 用户也可以直接修改表单里面的值,同样要计算小计。
    8. 用表单change事件 用最新的表单内的值 乘以 单价即可  但是还是当前商品小计

    • 购物车案例模块-计算总计和总额
    1. 核心思路:把所有文本框里面的值相加就是总计数量。总额同理
    2. 文本框里面的值不相同,如果想要相加需要用到each遍历。声明一个变量,相加即可
    3. 点击+号-号,会改变总计和总额,如果用户修改了文本框里面的值同样会改变总计和总额
    4. 因此可以封装一个函数求总计和总额的, 以上2个操作调用这个函数即可。
    5. 注意1: 总计是文本框里面的值相加用 val()     总额是普通元素的内容用text()  
    6. 要注意普通元素里面的内容要去掉¥并且转换为数字型才能相加

    • 购物车案例模块-删除商品模块
    1. 核心思路:把商品remove() 删除元素即可
    2. 有三个地方需要删除: 1. 商品后面的删除按钮 2. 删除选中的商品 3. 清理购物车
    3. 商品后面的删除按钮: 一定是删除当前的商品,所以从 $(this) 出发
    4. 删除选中的商品: 先判断小的复选框按钮是否选中状态,如果是选中,则删除对应的商品
    5. 清理购物车: 则是把所有的商品全部删掉

    • 购物车案例模块-选中商品添加背景
    1. 核心思路:选中的商品添加背景,不选中移除背景即可
    2. 全选按钮点击:如果全选是选中的,则所有的商品添加背景,否则移除背景
    3. 小的复选框点击: 如果是选中状态,则当前商品添加背景,否则移除背景
    4. 这个背景,可以通过类名修改,添加类和删除类

    $(function () {
      // 1. 全选 全不选 功能模块
      // 就是把全选按钮(checkall)的状态赋值给 三个小的按钮(j-checkall)就可以了
      // 事件可以使用change
      $(".checkall").change(function () {
        console.log($(this).prop("checked"))
        $(".j-checkbox, .checkall").prop("checked", $(this).prop("checked"))
        // 全选
        if ($(this).prop("checked")) {
          // 让所有商品添加 check-cart-item 类名
          $(".cart-item").addClass("check-cart-item")
        }
        else {
          // 移除check - cart - item
          $(".cart-item").removeClass("check-cart-item")
        }
      })
    
      // 2. 如果小复选框被选中的个数等于3 就应该把全选按钮选上 否则全选按钮不选
      $(".j-checkbox").change(function () {
        if ($(".j-checkbox:checked").length == $(".cart-item").length) {
          $(".checkall").prop("checked", true)
        }
        else $(".checkall").prop("checked", false)
        console.log($(".j-checkbox:checked")) // 长度length 是属性
    
        if ($(this).prop("checked")) {
          // 让当前商品添加 check-cart-item 类名
          $(this).parents(".cart-item").addClass("check-cart-item")
        }
        else {
          $(this).parents(".cart-item").removeClass("check-cart-item")
          // 移除check - cart - item
        }
      })
    
      // 3. 增减商品数量模块 首先声明一个变量 当我们点击 + 号 (increment),就让这个值++ 然后赋值给文本框
      $(".increment").click(function () {
        // 得到当前兄弟文本框的值
        let n = $(this).siblings(".itxt").val() // val 只能得到表单里面的值
        console.log(n)
        n++
        console.log(n)
        $(this).siblings(".itxt").val(n)
        let price = $(this).parent().parent().siblings(".p-price").text().substr(1)
        console.log(price)
        // $(this).parent().parent().siblings("p-sum").text(n * price)
        // console.log($(this).parent().parent().siblings("p-sum"))
        console.log($(this).parent().parent().siblings(".p-sum"))
        $(this).parent().parent().siblings(".p-sum").text(`¥` + (price * n).toFixed(2))
        get()
      })
    
      // 减号
      $(".decrement").click(function () {
        // 得到当前兄弟文本框的值
        let n = $(this).siblings(".itxt").val() // val 只能得到表单里面的值
        console.log(n)
        let price = $(this).parent().parent().siblings(".p-price").text().substr(1)
        if (n > 1) n--
        console.log(n)
        $(this).siblings(".itxt").val(n)
        $(this).parent().parent().siblings(".p-sum").text(`¥` + (price * n).toFixed(2))
        get()
      })
    
      // 小计钱数
      // 4. 用户修改文本框的值 计算小计模块
      $(".itxt").change(function () {
        // 先得到文本框里面的值 乘以 当前单价的值
        let n = $(this).val()
        let price = $(this).parents(".p-num").siblings(".p-price").text().substr(1)
        console.log(price)
        $(this).parents(".p-num").siblings(".p-sum").text("¥" + (n * price).toFixed(2))
        get()
      })
    
      // 5. 计算总计和总额模块
      function get() {
        console.log($(".p-sum").text())
        console.log($(".p-sum").text().split('¥'))
        arr = $(".p-sum").text().split('¥')
        sum = 0
        $.each(arr, function (i, ele) {
          sum += +ele
          console.log(ele)
        })
        console.log(sum)
    
        $("em").text("¥" + sum.toFixed(2))
    
        let count = 0
        $(".itxt").each(function (i, ele) {
          console.log(ele)
          count += +$(ele).val()
        })
        console.log(count)
        $(".amount-sum em").text(count)
      }
      get()
    
    
      // 删除
      $(".p-action").click(function () {
        // console.log($(this).parents(".cart-item").index())
        // let n = $(this).parents(".cart-item").index()
        $(this).parents(".cart-item").remove()
        get()
    
      })
    
      // 删除选中商品
      $(".remove-batch").click(function () {
        // console.log($(".j-checkbox").length)
        // let arr = $(".j-checkbox")
        // console.log(arr)
        // let price = 0
        // $(".j-checkbox").each(function () {
        //   console.log($(this).prop("checked"))
        //   if ($(this).prop("checked"))
        //     // console.log($(this).parents(".p-checkbox").siblings(".p-sum").text().substr(1))
        //     price += +$(this).parents(".p-checkbox").siblings(".p-sum").text().substr(1)
        //   console.log(`pirce: ${price}`)
        // })
        // console.log(`总价:${+$(".price-sum em").text().substr(1)}`)
        // $(".price-sum em").html(`${(+$(".price-sum em").text().substr(1) - +price).toFixed(2)}`)
    
    
    
        let k = 0
        $(".j-checkbox").each(function (i, ele) {
          if ($(ele).prop("checked")) $(this).parents(".cart-item").remove(), k++
        })
    
        $(".amount-sum em").html(`${$(".j-checkbox").parents(".cart-item").index() + 1}`)
        // 获得删除的商品 的价格
    
        if ($(".j-checkbox").length == 0) $(".checkall").prop("checked", false)
    
        get()
    
    
      })
    
      // 全删
      $(".clear-all").click(function () {
        // $(".j-checkbox").each(function () {
        //   $(this).parents(".cart-item").remove()
        // })
    
        $(".cart-item").remove()
        get()
    
      })
    
    })

    总结不易~ 本章节对我有很大的收获,希望对你也是~~~~

    评论
    添加红包

    请填写红包祝福语或标题

    红包个数最小为10个

    红包金额最低5元

    当前余额3.43前往充值 >
    需支付:10.00
    成就一亿技术人!
    领取后你会自动成为博主和红包主的粉丝 规则
    hope_wisdom
    发出的红包
    实付
    使用余额支付
    点击重新获取
    扫码支付
    钱包余额 0

    抵扣说明:

    1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
    2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

    余额充值