zoukankan      html  css  js  c++  java
  • 06jQuery-03-选择器查找和过滤

    1、查找 find()、parent()、prev()、next()

    通常情况下选择器可以直接定位到我们想要的元素,但是,当我们拿到一个jQuery对象后,还可以以这个对象为基准,进行查找和过滤

    最常见的查找是在某个节点的所有子节点中查找,使用find()方法,它本身又接收一个任意的选择器。

    例如有如下HTML结构:
    <!-- HTML结构 --> 
    <ul class="lang">
        <li class="js dy">JavaScript</li>
        <li class="dy">Python</li>
        <li id="swift">Swift</li>
        <li class="dy">Scheme</li>
        <li name="haskell">Haskell</li>
    </ul>

    使用find()查找:
    var ul = $('ul.lang'); // 获得<ul>
    var dy = ul.find('.dy'); // 获得JavaScript, Python, Scheme
    var swf = ul.find('#swift'); // 获得Swift
    var hsk = ul.find('[name=haskell]'); // 获得Haskell

    如果要从当前节点开始向上查找,使用parent()方法:
    var swf = $('#swift'); // 获得Swift
    var parent = swf.parent(); // 获得Swift的上层节点<ul>
    var a = swf.parent('div.red'); // 从Swift的父节点开始向上查找,直到找到某个符合条件的节点并返回

    对于位于同一层级的节点,可以通过next()prev()方法,例如:
    var swift = $('#swift');
    
    swift.next(); // Scheme
    swift.next('[name=haskell]'); // Haskell,因为Haskell是后续第一个符合选择器条件的节点
    
    swift.prev(); // Python
    swift.prev('.js'); // JavaScript,因为JavaScript是往前第一个符合选择器条件的节点


    2、遍历处理:过滤 filter()、map()

    2.1 filter()

    filter()方法可以过滤掉不符合选择器条件的节点:
    var langs = $('ul.lang li'); // 拿到JavaScript, Python, Swift, Scheme和Haskell
    var a = langs.filter('.dy'); // 拿到JavaScript, Python, Scheme

    或者可以传入一个函数,特别注意函数内部的this被绑定为DOM对象,而不是jQuery对象:
    var langs = $('ul.lang li'); // 拿到JavaScript, Python, Swift, Scheme和Haskell
    langs.filter(function () {
        return this.innerHTML.indexOf('S') === 0; // 返回S开头的节点
    }); // 拿到Swift, Scheme

    2.1 map()

    map()把每个元素通过函数传递到当前匹配集合中,生成包含返回值的新的jQuery对象。由于返回值是jQuery封装的数组,使用 get() 来处理返回的对象以得到基础的数组。

    在callback函数中,this引用每次迭代的当前DOM元素,而不是jQuery对象,所以如果获取例如value,无法使用诸如val()方法,而要使用 .value 属性来获取。

    直白地说,map()方法把一个jQuery对象包含的若干DOM节点转化为其他对象:
    var langs = $('ul.lang li'); // 拿到JavaScript, Python, Swift, Scheme和Haskell
    var arr = langs.map(function () {
        return this.innerHTML;
    }).get(); // 用get()拿到包含string的Array:['JavaScript', 'Python', 'Swift', 'Scheme', 'Haskell']

    获取的jQuery对象的DOM节点,例如可以通过如此方法直接转换为如所需id的数组,传给后台。
    如下,不使用map,我想传递一个id数组:
    //通过迭代数据加入到数组中
    var studentList = $("#beforeInTable :checked");
    var studentsArray = [];
    studentList.each(function() {
        studentsArray.push($(this).val());
    });
    如下,使用map,我可以直接获得一个id数组:
    var studentsArray = $("#beforeInTable :checked").map(function(){
        return this.value;
    }).get();

    还可以结合Array的 join() 方法,把数组中所有元素放入一个字符串,通过指定的分隔符进行分割:
    var studentsArrayStr = $("#beforeInTable :checked").map(function(){
        return this.value;
    }).get().join(",");
    //"82,83"
    这种方式在前后台交互中传递数据会很常用,使用数组或者拼接字符串。


    此外,一个jQuery对象如果包含了不止一个DOM节点,first()last()slice()方法可以返回一个新的jQuery对象,把不需要的DOM节点去掉:
    var langs = $('ul.lang li'); // 拿到JavaScript, Python, Swift, Scheme和Haskell
    var js = langs.first(); // JavaScript,相当于$('ul.lang li:first-child')
    var haskell = langs.last(); // Haskell, 相当于$('ul.lang li:last-child')
    var sub = langs.slice(2, 4); // Swift, Scheme, 参数和数组的slice()方法一致


  • 相关阅读:
    x64 平台开发 Mapxtreme 编译错误
    hdu 4305 Lightning
    Ural 1627 Join(生成树计数)
    poj 2104 Kth Number(可持久化线段树)
    ural 1651 Shortest Subchain
    hdu 4351 Digital root
    hdu 3221 Bruteforce Algorithm
    poj 2892 Tunnel Warfare (Splay Tree instead of Segment Tree)
    hdu 4031 Attack(BIT)
    LightOJ 1277 Looking for a Subsequence
  • 原文地址:https://www.cnblogs.com/deng-cc/p/6681454.html
Copyright © 2011-2022 走看看