zoukankan      html  css  js  c++  java
  • JQueryDOM操作和一些其他函数

    一、JQuery语法:

     1、使用JQuery必须先导入JQuery.x.x.js文件
     2、JQuery中的选择器:
     $("选择器").函数();
     ①$时JQuery的缩写,即可以使用JQuery("选择器").函数();
     ②选择器,可以是任何的CSS支持的选择符

     3、文档就绪函数:防止在文档未完全加载完成之前,运行JQuery代码:
     $(document).ready(function(){
     //JQuery代码
     });

     简写形式:$(function(){});

     [文档就绪函数&window.onload区别]
     ①window.onload必须等到网页中的所有内容加载完成后,才会执行代码(包括图片、视频等资源)。

     文档就绪函数,只需要在网页DOM结构加载完毕后,就可以执行代码
     ②window.onload只能写一个,写多个只会执行最后一个;
     文档就绪函数,可以写多个,并且不会被覆盖。

     4、原生JS对象与JQuery对象:
     ①使用:$("")选中的是JQuery对象,只能调用JQuery的函数,而不能使用元素JS的事件与函数;
     $("#p").click(); ✔
     $("#p").onclick = function(){} ✖
     解释:$("#p")是JQuery对象, .onclick是原生JS事件

     同理,使用document.getElement系列获取的是原生JS对象,也不能使用JQuery相关函数。

     ②原生JS对象转为JQuery对象
     可以使用$()包裹原生JS对象,即可转为JQuery对象。
     var p = document.getElementsByTagName("p");
     $(p).click(); ✔ 原生JS的对象p已转为JQuery对象

     ③JQuery对象转为原生JS对象。使用.get(index)或[index]
     $("#p").get(0).onclick = function(){} ✔
     $("#p").[0].onclick = function(){} ✔
     5、JQuery 解决多库冲突
     由于其他的JS库,也可能使用$作为自身标识,导致其他JS库与JQuery冲突。
     要解决冲突,可以放弃使用$,直接使用JQuery对象。

     【使用自执行函数传入JQuery对象简化写法】
     jQuery.noConflict();//调用这个函数,将$控制权让渡给其他类库,即JQuery不能再使用$

     !function(j){
     //函数之中,就可以用字母j,代替JQuery对象
     }(jQuery);

    二、JQuery的dom操作和其他函数

     使用$()直接创建一个标签节点

     将创建好的节点,插入到指定位置。

     在#div1内部的最后,直接插入一个节点。
    $("#div1").append("<p>这是被插入的p标签</p>");

     把新节点插入到#div1中
    $("<p>这是被插入的p标签</p>").appendTo("#div1");

    在#div1内部的开头,直接插入一个节点。
    $("#div1").prepend("<p>这是被插入的p标签</p>");


    $("#div1").after("<p>这是被插入的p标签</p>");
    $("<p>这是被插入的p标签</p>").insertBefore("#div1");


     把每个p标签外面,都包裹一层div
    $("p").wrap("<div></div>");

     把所有的p标签,包裹在同一个div中
    $("p").wrapAll("<div></div>");


     把#div1里面的所有子元素,用<div>包裹起来
    $("#div1").wrapInner("<div></div>");


     删除元素的父标签
    $("#p").unwrap();


     将所有匹配的p标签,全部换为span标签
    $("p").replaceWith("<span>111</span>");

    用span元素,替换掉所有p标签
    $("<span>111</span>").replaceAll("p");


     删除#div1中的所有子元素。 但是#div1依然保留空标签
    $("#div1").empty();


     直接从DOM中,删除#div1以及所有子元素
    $("#div1").remove();


     直接从DOM中,删除#div1以及所有子元素
    $("#div1").detach();

    【remove和detach异同】
     1、相同点:
     ① 都会把当前标签,以及当前标签的所有子节点,全部删除;
     ② 都可以在删除时,把当前节点返回。并可以使用变量接受返回的节点,以便后期恢复;
     
     2、 不同点:
     使用接受的节点,恢复原节点时。
     remove只能恢复节点的内容,但是事件绑定,不能再恢复;
     detach不但恢复节点的内容,还能再恢复 事件的绑定;

    [JS中.cloneNode() 和 JQ中 .clone()区别]
     两者都接受传入true/false的参数。

     .cloneNode() 不传参数或传入参数false,表示只克隆当前节点,而不克隆子节点。 传入true表示可隆全部子节点。

     .clone() 无论传入哪个参数,都会克隆所有子节点。但是,不传参数或者传入false,表示只克隆节点,不克隆节点绑定的事件。 传入true表示同时克隆及诶单绑定的事件。

    //$("#div1").clone(true).empty().insertBefore("button:eq(0)");

    ************************CSS和属性相关操作************************


    使用attr()设置或者取到元素的某个属性。

    $("#div1").attr("class","cls1");

    $("#div1").attr({ //使用attr一次性设置多个属性
    "class" : "cls1",
    "name" : "name1",
    "style" : "color:red;"
    });
    console.log($(".p").attr("id"));

     删除元素属性
    $("#div1").removeAttr("class");


     prop与Attr区别。
     对于checked/disabled等属性名等于属性值的属性,使用prop返回的将是true或false, 使用attr返回的将是属性名或者undefined
     
     所以,对于属性名等于属性值,或者属性是true/false的特殊属性,通常使用prop选取。 其他的属性,通常使用attr选取。

    console.log($("button:eq(2)").attr("disabled"));
    console.log($("button:eq(2)").prop("disabled"));


     给元素添加class属性,与attr添加class的不同是,使用addClass添加的新类名,将会保留原来已有的class名。
    $("p").addClass("selected1 selected2");

     删除掉元素指定的class
    $("p").removeClass("selected1");

     元素有指定class名,则删除; 元素没有指定class名,则新增。
    $("p").toggleClass("selected1");


    取到或设置元素里面的html,相当于innerHTML
    console.log($("#div1").html());
    $("#div1").html("<h1>我是新的h1</h1>");


    取到或设置元素里面的文字内容,相当于innerText
    console.log($("#div1").text());
    $("#div1").text("<h1>我是新的h1</h1>");


     获取或设置 元素的Value值 
    console.log($("input[type='text']").val());
    $("input[type='text']").val("姜浩特别帅!");


     给元素设置CSS样式属性 属于style行级样式表权限
    $("#div1").css({
        "color":"red",
        "user-select":"none",
        "text-stroke":"0.5px blue"
       });

    var id = setInterval(function(){
    $("#div1").css({
    "width":function(index,value){
    if(parseFloat(value)+10 >= 600){
    clearInterval(id);
    }
    return parseFloat(value)+10+"px";
    }
    });
    },500);

     

     获取和设置元素的width和height属性 
    console.log($("#div1").height());
    console.log($("#div1").width());
    $("#div1").width("400px");


     获取元素的内部宽度。 包括宽高和padding 
    //console.log($("#div1").innerHeight());
    //console.log($("#div1").innerWidth());


    获取元素的外部宽高。 包括宽高+padding+border
     传入参数为true时,还要包括margin

    console.log($("#div1").outerHeight(true));
    console.log($("#div1").outerWidth());



     offset():
     获取元素,相对于浏览器窗口左上角的偏移位置。
     这个位置,包括margin/position等。
     返回的是一个对象,包含两个属性,分别是left和top
     
     
     position():
     获取定位元素,相对于父元素的偏移位置(父元素必须是定位元素)。
     这个位置,只包括top/left等定位属性。 而margin将被视为当前元素的一部分,并不会视为偏移量范畴。
     
     如果父元素有定位属性。则相对于父元素padding左上角定位;
     如果父元素没有定位属性,则与offerSet一样 ,相对于浏览器左上角定位(但是,只是两者的定位原点都在浏览器左上角。 在计算偏移量时,offerSet会计算margin和top. 而position只计算top)。
     

    console.log($("#div1").offset().top);
    console.log($("#p1").offset());

    console.log($("#p1").position());


    var top = $("#div1").offset().top;
    var docHeight = $(window).height();
    $(document).scroll(function(){
    var scrollTop = $(document).scrollTop();
    console.log(scrollTop);
    if(scrollTop>=800){
    $("#div1").css("display","block");
    }
    });



  • 相关阅读:
    统计字符
    两军交锋
    FatMouse' Trade
    A + B Problem II
    Number Sequence
    Max Sum
    类的设计
    类与对象
    面向对象思想
    第一个OC程序
  • 原文地址:https://www.cnblogs.com/rsj1/p/7538849.html
Copyright © 2011-2022 走看看