jQuery的基本操作(下)

196 阅读2分钟

删除节点操作: remove():删除整个节点 (selector).remove([expr]);empty():清空节点内容(selector).remove([expr]); empty():清空节点内容 (selector).empty(); detach():删除整个节点,保留元素的绑定事件、附加的数据 案列:

        let x;    //定义一个全局变量
        $('button[title]').click(function(){
            /* remove方法删除整个节点 包括子节点 */
            $('ul').remove();
            /* empty 清空节点的内容 会保留自身节点,子节点全部删除 */
            $('ul').empty();
            /* detach 删除整个节点,保留元素的绑定事件、附加的数据 */
            x = $('h1').remove();
            // console.log(x);
        })
        $('button[aa]').click(function(){
            $('body').prepend(x);
        })
        /* detach remove 对于原生的绑定事件 删除之后,绑定的事件都起作用 */
        document.getElementsByTagName('h1')[0].addEventListener('click',function(){
            alert(123)
        })
        $('h1').on('click',function(){
            alert(123)
        })
        $('h1').click(function(){
            alert(123)
        })

遍历前辈元素和filter

   /* parent只返回当前元素的一个父节点 */
        // console.log($('p').parent())
        /* 
            parent():获取元素的父级元素
            parents():元素元素的祖先元素
        */
       /* parents会把当前元素的祖先节点全部返回 从自身往外找 找到了还会继续遍历上面的节点 */
        // console.log($('p').parents('ul'))
        /* closest()会返回document文档 从自身往外找 找到了就不找了 */
        // console.log($('p').closest('ul'))
        /* 区别 */
        /* 效率上closest比parents更好 */
        /* closest会找到靠近自己最近的一个父节点 */
        /* parents会找到自己的所有的匹配的祖先元素 */

        /* 把.fl筛选出来 做点什么 */
        // $('li').filter('.f1').css('background','red');
        /* 排除.f1 给除了.f1的元素做点事情 */
        /* 排除多个class */
        // $('li').not('.f1,.f2').css('background','red');
        /* 排除一个class */
        // $('li').not('.f1').css('background','red');
        // $('li').not('.f2').css('background','red');

each遍历元素

  $('button').click(function(){
            /* each回调里面有两个参数,第一个表示元素的索引,第二个表示具体的元素(原生的) */
            /* ele不是一个jq对象 */
            $('li').each(function(index,ele){
                // console.log(index+'-----'+ele.innerText)
                // console.log(index+'-----'+$(ele).text())
                // $('button').before( $(ele).text()+'<br>' )
                /* 不克隆就是原物直接搬运,克隆就是拷贝一份,再搬运 */
                if(index!=1){
                    $('button').before( $(ele).clone() )
                }
               
            })
        })

prop和attr的区别

  /* alt是本身就有的属性 所有两者都能使用 */
        // alert( $('img').attr('alt') );
        // alert( $('img').prop('alt') );

        // alert( $('img').prop('data-title') );
        // $('img').prop('data-title','我爱南京');
        /* attr 和 prop的区别 */
        /* 获取和设置自定义属性的时候 使用attr 不能使用prop */
        /* 获取自身属性的时候使用prop */
        console.log( $('input[type=checkbox]').attr('checked') ) //选中的时候 checked 未选中是undefined
        console.log( $('input[type=checkbox]').prop('checked') ) //选中的时候 true 未选中是false

创建和插入节点

         /* 原生 */
        // let div = document.createElement('div')
        // console.log(div);
        /* 把DOM节点转化成jQuery节点 */
        // console.log( $('<div></div>') );
        // console.log( $('<h1 data-name="zhangsan">我为南京代言</h1>') );
        /* $(A).append(B)表示将B追加到A中 */
        // $('.box').append( $('<h1 data-name="zhangsan">我为南京代言</h1>') )
        // document.getElementsByClassName('box')[0].appendChild(document.createElement('div'))
        /* $(A).appendTo(B)表示把A追加到B中 */
        // $('<h1 data-name="zhangsan">我为南京代言,我是张sir</h1>').appendTo('.box');
        /* $(A). prepend (B)表示将B前置插入到A中 */
        // $('.box').prepend('<h1 data-name="zhangsan">我为南京代言,我是张sir</h1>')
        /* $(A). prependTo (B)表示将A前置插入到B中 */
        // $('<h1 data-name="zhangsan">我为南京代言,我是张sir</h1>').prependTo('.box')

节点遍历

    <!-- children()方法可以用来获取元素的所有子元素 -->
    <!-- 获取<section>的子元素,但不包含子元素的子元素 -->
    <script src="./jquery-1.12.4.js"></script>
    <script>
        // console.log( $('ul').children('p').css('border','1px solid red') )
        /* 遍历同辈元素 */
        // $('ul').children('p').prev().css('border','1px solid red')
        // $('ul').children('p').next().css('border','1px solid red')
        // console.log( $($('ul').children('li')[2]).css('border','1px solid red') )
        // $('ul').children('li').eq(2).css('border','1px solid red')
        // $('ul').children('li:eq(2)').next().next().css('border','1px solid red')
        // $('ul').children('li:eq(2)').prev().prev().css('border','1px solid red')
        /* next prev只是一个元素 */

        /* 用于获取位于匹配元素前面和后面的所有同辈元素 */
        $('ul').children('li:eq(2)').siblings('.aa').css('border','1px solid red')

    </script>
    

附加知识点:

jQuery中 on 和addEventListener的区别:
<div id='one'></div>

jq : on 在绑定事件中

var one = document.getElementById('one');

one.on('click',function(){console.log(123)});

one.on('click',function(){console.log(456)});

控制台会输出456;可想而知,第二个覆盖了第一个函数。

one.addEventListener('click',function(){console.log(123)});

one.addEventListener('click',function(){console.log(456)});

控制台会输出123456. 说明addEventListener可以同时绑定多个事件。