kiddkid的jQuery要点笔记

JQuery

语法

  • jq里的对象.行为(处理函数)

    • css()

      • ​ css() 里面写属性名则为 获取 属性值

      • ​ css() 里面写key,value 设置key属性的值为value

      • ​ css() 里面写{k1:v1,k2:v2,k3:v3} 同时设置k1 k2 k3三个属性

      • ​ css() 里面还可以写key,function() 则 设置 key属性的值为 函数的返回值

        jq里可以进行链式编程,原因是css函数 返回值是对象本身

  • jq文件的引入

<!-- 引入jquery的文件 -->
<!-- js文件的导入 可以在html的任何位置 -->
<script src="js/jquery-3.7.1.js"></script>
  • jq与js

    对象转换

    • **js->jq : **使用$()包裹即可

    • jq->js : jq对象 一般是 选择器 方式 获取的 ,它获取到的是一个类似数组的对象

    • jq对象使用下标获取到 数组里的单个 js对象

      • p1[0].innerText = "first P!"
        
    • jq对象使用get行为来获取指定下标的 数组里的单个 js对象

      • ps.get(1).innerText = "33 段落!"
        
    • jq->jq :

      • jq对象使用eq行为来获取制定下标的 数组里的单个 jq对象

        • ps.eq(0).text("jq对象设置的文本内容");
          

    一些jq里的js对象

$("input:hidden").each(function (i) {
    //this指jq对象集合里的元素 对应的js对象
    console.log(i+"---"+$(this).val());//可以直接this.xxxx
 })
$("input:hidden").each(function (i,obj) {
  //obj 也是 jq对象集合里的每一个元素 对应的 js对象
  console.log(i+"---"+$(obj).val()+"===="+obj.value);
})

取值

  • js里取对象的值 使用 value
    jq里取对象的值 使用 val() — 获取匹配元素集合里的第一个对象的值

    val()获取时 只获取第一个
    text() 获取时 获取所有复合的

举例:

<script>
    window.onload = function () {
        document.getElementById("h21").style.backgroundColor = "pink"
    }
---- ready()是 文档准备完毕的行为
    //行为(处理函数)
    //事件源 事件 处理函数
    $(document).ready(function () {
        //$()里面 使用 选择器 来 选择 html 元素
        $("#h22").text("jq更改后的内容!")
        $("#h22").css("backgroundColor","skyblue")
    })
</script>

选择器

选择器是指$("")双引号内部的

基本选择器
  • id选择器 #id
$("#b1").click(function () {
    let attrs = {backgroundColor:"#0000FF",border:"2px solid red"};
    //$("#one").css("backgroundColor","#0000FF");
    //$("#one").css(attrs);
    $("#one").css("backgroundColor",function () {
        return "red";
    })
})
  • 类选择器 .class
//类
$("#b2").click(function () {
    $(".mini").css("backgroundColor","#FF0033")
})
  • 属性选择器 属性
$("#b3").click(function () {
    $("div").css("backgroundColor","#00FFFF")
})
  • 所有选择器 *
$("#b4").click(function () {
    $("*").css("backgroundColor","#00FF33")
})
  • 并列选择器 选择器,选择器
$("#b5").click(function () {
    $("span,#two").css("backgroundColor","#3399FF")
})
可见性选择器
  • 可见 :visible
$("#b1").click(function () {
$("div:visible").css("backgroundColor","#0000FF")
})
  • 不可见 :hidden
$("div:hidden").css("backgroundColor","#0000FF").show(2000/*,function () {
   alert("显示完成!")
}*/)
遍历
  • jq对象

    • let hids = $("input:hidden");//jq对象集合(类似数组)
          
       for (let i = 0; i < hids.length; i++) {
          console.log(hids.eq(i).val());
       }
      
    • 专门遍历jq对象集合的行为 each()

      • each() 里面 为每一个 jq对象集合里的元素 进行调用一个函数

      • each(function(){}) fun()里可以设置 下标 或 当前对象(对应的js对象)

      $("input:hidden").each(function () {
      	//this指jq对象集合里的元素 对应的js对象
      	console.log(this.value+"---"+$("this").val());
      })
      
  • js对象

    • for (const i in hids) {
          console.log(hids[i].value);
       }
      

      不推荐,会把jq对象集合里的一些其他东西也遍历出来,成为undefine

属性选择器
  • 含有某属性

    $("#b1").click(function () {
      $("div[title]").css("backgroundColor","red");
    })
    
  • 属性值等于

    $("#b2").click(function () {
       $("div[title='test']").css("backgroundColor","purple")
    })
    
  • 属性值不等于

    $("#b3").click(function () {
       $("div[title!=test]").css("backgroundColor","yellow")
    })//没有属性title的也将被选中
    
  • 属性值开头等于

$("#b4").click(function () {
	$("div[title^=te]").css("backgroundColor","yellow")
})
  • 属性值结尾等于
$("#b5").click(function () {
	$("div[title$=est]").css("backgroundColor","yellow")
})
  • 属性值含有xxx
$("#b6").click(function () {
   $("div[title*=es]").css("backgroundColor","yellow")
})
  • 并列
$("#b7").click(function () {
   $("div[id][title*=es]").css("backgroundColor","yellow")
})
表单属性选择器
  • 匹配所有可用元素

    • $(function () {
            $("#b1").click(function () {
               //val内的函数 参数 i 是单个对象的索引,old是单个对象的原先值
               $("input[type='text']:enabled").val(function (i,old) {
                  //return old + i;
                  return "冰球"+i;
               })
            })
      
  • 匹配所有不可用元素

    • $("#b2").click(function () {
         $("input[type='text']:disabled").val(function (index) {
            return "大雪球"+index;
         })
      })
      
  • checked

    • $("#b3").click(function () {
               alert("复选框选中的个数:"+$("input[type='checkbox']:checked").length)
            })
      
  • selected

$("#b4").click(function () {
         alert("下拉框选中的内容:"+$("select option:selected").text())
      })
表单标签选择器

除标注外其余筛选内容与css相同

  • :input 匹配所有 input, textarea, select 和 button 元素
  • :text
  • :password
  • :radio
  • :checkbox
  • :submit [ , ]
  • :image
  • :reset
  • :button [ , ]
  • :file

获取值和属性

  • html

    • $("#btn1").click(function () {
         alert($("#hh1").html())
      })
      
  • text

    • $("#btn2").click(function () {
        alert($("#hh1").text())
      })
      
  • attr(prop)

    • .prop() 是用于获取或设置 DOM 元素的属性,而 .attr() 是用于获取或设置元素的自定义属性或 HTML 属性。对于像 checkedselecteddisabled 这样的布尔属性,建议使用 .prop()

    • $("#btn3").click(function () {
         alert($("#in1").attr("type"))
      })//设置一个属性
      
      $("#img1").mouseenter(function () {
         //$(this).attr("src","../img/head.jpg")
         let attrs = {src:"../img/head.jpg",title:"修勾"}
         $(this).attr(attrs);//设置多个属性
      })
      
      $("#img1").mouseout(function () {
         $(this).removeAttr("src");
      })
      
  • CSS类

    • $("#h1last").mouseenter(function () {
         //$(this).addClass("myborder");
         $(this).toggleClass("myborder");
      })
      /*$("#h1last").mouseout(function () {
         $(this).removeClass("myborder");
      })*/
      

文档处理

插入

<input type="button" id="b2" value="添加成都li到 北京前"/><br/>
$("#b2").click(function () {
    let bool = false;//保存是已存在的结果
    $("li").each(function () {//遍历,判断原先是否有成都
        if (this.innerText==="成都"){
            bool = true;
            return;
        }
    })
    if (bool===true) {//进行结果判断,如果存在
        alert('已有!')
        return;//结束该程序
    }
    //新的li
    let newLi = $("<li></li>");
    newLi.text("成都");//设置内容	注意input型为value() 其它为text()
    newLi.attr({id:"cq",name:"chengdu"});//设置属性
    //父子
    $("#city").prepend(newLi);//在首部追加新的li
})
<input type="button" id="b4" value="添加成都li到 北京和上海之间"/><br/>
$("#b4").click(function () {
    let bool = false;
    $("li").each(function () {
        if (this.innerText==="成都"){
            bool = true;
            return;
        }
    })
    if (bool===true) {
        alert('已有!')
        return;
    }
    //新的li
    let newLi = $("<li></li>");
    newLi.text("成都");
    newLi.attr({id:"cq",name:"chengdu"});
    //兄弟
    $("#sh").before(newLi);
})
  • 练习

    • 下拉框左右选择

      •     $("#add").click(function () {
                $("#first option:selected").appendTo($("#second"));
            })
            $("#add_all").click(function () {
                $("#first option").appendTo($("#second"));
            })
            $("#remove").click(function () {
                $("#second option:selected").appendTo($("#first"));
            })
            $("#remove_all").click(function () {
                $("#second option").appendTo($("#first"));
        
    • checkbox

      • 	$("#checkedAll_2").change(function () {
        		let chk = $(this).prop("checked");
        		/*alert(chk)*/
        		$(":checkbox[name='items']").prop("checked",chk);
        	})
        	$("#CheckedAll").click(function () {
        		$(":checkbox[name='items']").prop("checked",true);
        	})
        	$("#CheckedNo").click(function () {
        		$(":checkbox[name='items']").prop("checked",false);
        	})
        	$("#CheckedRev").click(function () {
        		$(":checkbox[name='items']").each(function () {
        			$(this).prop("checked",!$(this).prop("checked"));
        		})
        	})
        	//运动选项必须有选择才能提交,js里,表单对象有提交事件,jq里,表单对象有提交行为
        	$("#send").click(function () {//此处是一个普通按钮
        		let length = $(":checkbox[name='items']:checked").length;//筛选选择的
        		if (length === 0){
        			let newP = $("<p></p>");
        			newP.css("color","red");
        			newP.text("必须选择一个!");
        			newP.insertBefore($("#CheckedAll"))//插入
        		}else{
        			//表单提交
        			$(this).parent().submit();
        		}
        	})
        
删除
  • .empty() 清空标签内容
  • .remove() jq里的删除行为, 将该元素删除
replace() 替换
  • replaceAll(选择器/jq对象/js对象) 替换所有

    • let $button = $("<button></button>");
      $button.css("backgroundColor","#FD1");
      $button.replaceAll($("p:even"));
      
    • $("p:first").replaceAll($("p:last"));
      

  • replaceWith() 用…替代

    • let myimg = $("<img/>");
      myimg.attr({src:"../img/head.jpg",width:"200",title:"head"})
      $("p:eq(1)").replaceWith(myimg);
      
  • 保留原本

    • $("p:first").clone().replaceAll($("p:last"));
      

clone() 复制
  • 不克隆事件
$("#b0").click(function () {
    $("p:first").clone().insertAfter($("img:first"))
})
  • 连同事件一起克隆
$("#b0").click(function () {
    //克隆一并连同事件一起克隆
    $("p:first").clone(true).insertAfter($("img:first"))
})

事件

hover(fun入,fun出)

只有一个fun时则移入移出都为该函数

效果

  • fadeIn() fadeOut()
$("button:first").hover(
    function () {
    $("#d1").fadeIn(800)
},
    function () {
        $("#d1").fadeOut(800)
    }
)
  • animate()
$("button:first").hover(
    function () {
        let props = new Object();
        props.left = "-=100";
        props.width = "-=20"
        props.borderRadius = "+=200"
        $("#d1").animate(props,3000)
    }
)

补充

$("#addUser").click(function () {
   //接收
   let nameV = $("#name").val();
   let emailV = $("#email").val();
   let telV = $("#tel").val();

   //创建tr,td
   let newTr = $("<tr></tr>");

   let nameTd = $("<td></td>");
   nameTd.text(nameV);

   let emailTd = $("<td></td>");
   emailTd.text(emailV);
   let telTd = $("<td></td>");
   telTd.text(telV);

   let aTd = $("<td></td>");
   let a = $("<a></a>");
   a.attr("href","javascript:void(0)")//特殊的写法:表示什么都不做
   a.text("Delete");
   a.click(function () {
      let b = confirm("你确定要删除:"+nameV+"的记录吗?");
      if (b) {
         //jq里的删除行为, remove() 将匹配的元素删除
         newTr.remove();
      }

   })
   aTd.append(a);

   newTr.append(nameTd);
   newTr.append(emailTd);
   newTr.append(telTd);
   newTr.append(aTd);

   $("#usertable tbody").append(newTr);

})

在您提供的代码片段中,您使用了 jQuery 来动态地向表格中添加新行,并为每行中的 “Delete” 链接分配了一个点击事件处理程序。当您添加多行数据时,程序能够准确地定位并删除特定行,是因为每个 “Delete” 链接的点击事件处理程序是在其被创建时绑定到特定的表格行(<tr>)上的。

以下是几个关键点解释为什么能准确删除特定行:

  1. 事件委托: 您使用了事件委托,也就是将点击事件绑定到父元素(这里是 <tbody>)上,然后通过事件冒泡来处理点击。但是,在您的代码中,实际上是直接在创建的 <a> 元素上绑定了点击事件。

  2. 闭包: 当您为 “Delete” 链接创建点击事件时,它实际上是在一个闭包内。闭包可以访问它被创建时的词法环境,这意味着它可以访问到当时存在的局部变量,比如 newTr

    let a = $("<a></a>");
    a.click(function () {
        // 这个函数可以访问它创建时的 newTr 变量
        newTr.remove();
    });
    
  3. DOM引用: 在闭包中,newTr 引用的是创建它的 <tr> 元素。当点击事件发生时,事件处理函数仍然可以访问这个引用,并且可以调用 .remove() 方法来从 DOM 中删除它。

  4. 动态创建元素: 虽然您动态地创建了多个行和链接,但每个链接都绑定到它所在的那一行。因此,当您点击 “Delete” 链接时,事件处理程序只与它直接相关的行交互。

总之,当用户点击 “Delete” 链接时,事件处理程序通过闭包正确地找到并删除了它所附加的行,而不是其他的行。这是因为在事件绑定和执行时,JavaScript 的闭包机制保持了正确的元素引用。

  • 28
    点赞
  • 21
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值