[jQuery]:jQuery的基础知识、遍历方式和构造函数

jQuery基础语法:$(selector).action() 

  • $符号:jQuery的简写形式,等同于jQuery(selector).action()。
  • selector:jQuery的选择器,继承了CSS和Xpath的部分语法,和使用CSS选择器差不多,用于获取元素。
  • action():jQuery对象要执行的操作,例如text()、html()和attr()等方法。

关于jQuery对象

jQuery框架只有一个jQuery对象,其所有的函数方法都来自该对象,该对象不会同原生JS和别的JS框架产生冲突。

使用$(selector)会返回一个jQuery对象,该对象是对DOM对象的包装,但不等价于DOM对象,它们的方法不是共用的。

  • jQuery对象是元素对象集合,包含了匹配的所有元素,可通过 [index] 或 $(selector).get(index) 获取相应元素,但会被转成JS对象。
  • jQuery对象的方法都被设计成自动操作对象集合,这意味着无需循环遍历元素,jQuery对象方法会自动对所有对象集合都执行相同的方法。而原生JS获取的元素为对象集合时,则要循环遍历每个元素才能调用相应方法。
  • jQuery和原生JS可以混用,如果要使用对方的方法,则jQuery对象和DOM对象需要相互转换。

获取一个jQuery对象,即元素节点。

 <div>
    <p>段落1</p>
    <p>段落2</p>
 </div>
 <script>
    var $p = $("div p"); //获取div块中所有p元素,返回jQuery对象
    console.log($p.text()); //对jQuery对象包含的所有节点都执行text()
 </script>

jQuery对象方法会自动操作对象集合,例如html()、hide()等。 也就是jQuery对象无论包含多少个元素,每个节点对象都会调用该方法。

但这种方式也有弊端,就是会一次性执行,如果要限制执行次数,可以对jQuery对象进行循环遍历,单独操作。

 var $p = $("div p"); 
 for(var i = 0; i < $p.length; i++){
    //使用$p[i]形式,会转换为JS对象,不能调用jQuery对象方法
    console.log("JS对象方式:" + $p[i].innerText);
    //$()将DOM对象转成jQuery对象
    var $p2 = $($p[i]);
    console.log("jQuery对象形式:" + $p2.text());
 }

通过上面实例可以看出jQuery对象和JS对象(DOM对象)进行了转换,使用的方法也不同,但作用是一样的。


jQuery对象和JS对象相互转换

        var $a = $("seletor");
        //转成JS对象
        var abc = $a[0]; 
        var abc1 = $a[1];
	var abc2 = $a.get(3); //jQuery对象的get(index)方法
        //JS对象转成jQuery对象
        var $b1 = $( abc );
        var $b1 = $( abc1 );

使用说明:jQuery对象是一个元素对象集合,直接使用可以调用JQuery对象方法。但通过下标获取单独对象时就会转成JS对象,这点要注意。而将JS对象转成jQuery对象只需将JS对象传入$(),相当于jQuery()传入构造参数,就转换成jQuery对象。

建议:定义jQuery对象类型变量时,尽量使用$开头,以便区分。

技巧:如果不知道变量是什么类型,可以通过编辑器(例如vscode)来调用变量的方法,通过提供的方法就能看出是什么对象类型。


jQuery的each()方法

jQuery的each()方法可用于遍历一切集合(数组、对象集合),可以代替for和foreach。each()有两种用法:$.each() 和  $().each()。

  • $.each()  == jQuery.each(),相当于jQuery的静态方法,该方式可以遍历一切集合。
  • $().each()则是jQuery对象的方法,用于遍历jQuery对象包含的元素节点对象。
两种each()方法的参数列表
 //JQuery.each(func: (index: number, elem: Element) => any): JQuery
 $p.each(); 
 //JQueryStatic.each<T>(collection: T[], callback: (indexInArray: number, valueOfElement: T) => any): any (+1 overload)
 $.each(); 

$.each(Object[] ,function(index, element)) 遍历数组,则函数的两个参数必须存在,第一个作为索引值,而第二个参数则是获取的数组值,如果只写一个,那么只能拿到索引值,还需要通过数组名[index]调用。 如果是遍历对象集合,函数可以选择不添加参数,直接用this访问。如果写了参数就需要两个都写,因为第一个参数永远是索引值。

$().each(function(index, element))  使用方式就和$.each()遍历对象集合一样,这里就不说了,看实例。

如果遍历的是jQuery对象,也会和for或者foreach一样,得到是DOM对象,所以要使用jQuery方法,还需要使用$()再次转换。


$().each()实例——遍历jQuery对象

<ul>
    <li>列表1</li>
    <li>列表2</li>
</ul>
<script>
    var $li = $("ul li");
    //i :jQuery对象集合的索引值,elem :获取的是DOM对象
    $li.each(function(i, elem){
        console.log(i + ".." + elem.innerText);
    });

    //2.采用this指向当前DOM对象
    $("ul li").each(function(index, domEle){
        $(this).text("OK"); //把DOM对象转成jQuery对象
    });
 </script>

如果要限制遍历次数,可以在each()方法外定一个变量,each()方法中自增,满足次数就return false,则后续DOM对象不再遍历。


$.each()实例——遍历一切集合(数组、对象集合)
    //遍历一维数组
    var arr = [3,12,43,34,61];
    $.each(arr, function(index, value){
        console.log(value);// 也可以省略value, 使用arr[index]
    });
    //foreach方式, for省略,因为差不多。
    for(var i in arr){
        console.log(arr[i]);
    }
//遍历二维数组
var arr = [[3, 12, 43], [34, 61, 51], [45, 86, 26]];
$.each(arr, function (i, val) { //这里val是二维数组
  $.each(val, function (i, vals) {//这里对二维数组遍历取值
       console.log(vals);
   });
}); 
for(var i in arr){
   for(var j in arr[i]){
       console.log(arr[i][j]);
    }
}
使用each()获取数组值和常规方式遍历数组获取值,看起来差不多,但省略了循环遍历,虽然简便了,但隐藏了细节。而且each()是jQuery独有的,所以基本方式还是要掌握。


除了遍历数组,$.each()遍历对象属性非常好用,即json对象。

    //json对象 key-value格式
    var person = { name : "小天", age : 18, sex : "男" };
    $.each(person, function(key, val){
        console.log(key + "--" + val);
        //可以只通过key,拿到相应value   person[key]
    });

有多个json对象时,即json对象数组。使用$.each()来遍历也比较方便。

    //遍历json对象数组
    var all_person = [
        {name : "小天", age : 18, sex : "男"},
        {name : "小云", age : 29, sex : "女"},
        {name : "小黑", age : 35, sex : "男"}
    ];
    //这里的idx是数组下标,用于获取每个json对象。objVal则是获取到的json对象
    $.each(all_person, function(idx, objVal){
       console.log( objVal.name + "|" + objVal.age + "|" + objVal.sex);
    });

    //常规方式
    for(var i = 0; i < all_person.length; i++){
        //对数组中的每个json对象进行遍历
        for(var key in all_person[i]){
            console.log(all_person[i][key]); //key表示属性,通过key拿到相关value
        }
    }


$.each()遍历jQuery对象,也就是将jQuery对象作为集合参数,两者比较如下
    <div>
        <ul>
            <li>语文</li>
            <li>数学</li>
            <li>英语</li>
        </ul>
    </div>
    <script>
        var li = $("div ul li");
        $.each(li, function(i, domElem){
            console.log(i, domElem); //元素序列, DOM对象
        });

        li.each(function(){
            console.log(this);
        });
    </script>

相较于jQuery对象的each(),$.each()方式会更加灵活。使用时,可根据个人情况来选择相应用法。


jQuery构造函数用法

jQuery构造函数是jQuery的核心,该构造函数需要传入字符串,然后根据传入的内容作出不同的操作。下面将会详细jQuery构造函数的各种用法。


用法1  jQuery(selector , [context]) 

传入CSS选择器格式,匹配相关元素集合,返回一个jQuery对象。context参数是可选的,没有context参数,就从document文档中开始查找;指定context参数,则在context中查找相应元素。

 $("#d2 p") //获取 id=d2 元素中所有p元素
 $("div .c1", "p"); //从p元素中查找,匹配的是div元素中包含类名c1的元素
但这种方式逻辑很不好,所以可以采用find(“selector”)方法来代替context参数。例如:
     //获取div元素中包含c1类名的p元素
     $("div p[class='c1']"); 
     //先获取所有div元素,再在div元素中查找包含c1类名的p元素。
     $("div").find("p[class='c1']");
注意:find()方法是在对指定元素的后代元素进行查找。 所以这里不能写成$("div p").find("[class='c1']");  因为p元素中没有其他元素。

这种方式是jQuery的基础,和document.querySelector()/querySelectorAll()一样, 使用的好不好取决于选择器水平,所以jQuery选择器是非常重要的。


用法2  jQuery(domElement) :DOM对象转成jQuery对象。最常用的就是遍历DOM对象时,$(this)转换当前DOM对象。

用法3  jQuery(jQuery对象) :克隆传入的jQuery对象,返回一个该jQuery对象的副本。

    var $p = $("div p");
    var $clone = $($p); //两者包含的DOM对象是一样的。


用法4  jQuery(function) 

在DOM文档加载完成后,执行传入的函数。 等同于$(document).ready(function);

        $(function(){
           //....
        });
        $(document).ready(function(){
           //....
        });

用法5  jQuery(html) :创建一个新元素节点,作用和document.createElement()一样。

传递一个HTML字符串,可以选择手动创建,也可以由函数动态返回。创建单个元素时,记得使用闭合标签或者HTML语法。实例如下:

        var $p = $("<p/>");
        var $p1 = $("<p></p>");
如果是$("<p>")这种格式,jQuery会解析成$(document.createElement(“span”)),所以不推荐。成功创建DOM节点后,则会返回一个引用该DOM元素的jQuery对象。

这里随便提一下添加元素节点方法:append() 和 appendTo()。

    <div id="d1"></div>
    <script>
        var $p = $("<p/>");
        $("#d1").append($p); //为指定元素添加元素节点,和原生DOM的append()一样。
        //将元素节点添加到指定节点中
        $("<p>还可以</p>").appendTo("#d1");
    </script>


至于jQuery的其他DOM操作,由于篇幅问题,不再详述,会另外用一遍文章介绍。


至此,关于jQuery的基本语法和使用方式、jQuery对象遍历方式和jQuery构造函数的用法已基本介绍完成。如果想了解jQuery和Javascript的不同建议去查看相关资料。


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值