huhongpeng
## JQ初识

```python
jQuery是对js进行的二次封装的工具包
    二次封装:比js使用起来便捷了,操作比就是综合了(写一句jq可以实现多句js逻辑),底层就是原生js
    工具包:jq就是一堆函数的集合体,通过jq对象来调用(jQuery)

1.官网下载:https://jquery.com/download/
    jquery-3.4.1.js | jquery-3.4.1.min.js
    
2.在 需要jq环境的页面中 使用jq
<script src="js/jquery-3.4.1.js"></script>
<script>
     $ 就是jQuery对象,可以使用jQuery的所有功能
</script>

3.根据API学习jq:http://jquery.cuishifeng.cn/
    
    
```

## JQ的常用操作

```python
1.jq选择器 - 得到的是jq对象 - jq对象可以调用jq库的所有功能
$(\'css语法选择器\')

    想通过js对象获取第2个p的文本内容
    let ps = $(\'p\');
    console.log(ps);
    let _p2 = ps[1];  # jq对象可以理解为存放了js对象的数组
    console.log(_p2.innerText);

    想通过jq对象获取第2个p的文本内容
    p2 = $(_p2);
    console.log(p2.text());

    总结:
    1. $(\'css3选择器语法\') 就是jq选择器,获得的是jq对象,jq对象可以理解为存放了js对象的数组 (存放了几个js对象不需要关心)
    2. jq对象转换为js对象 - jq对象[js对象所在索引] - 可以使用js的语法
    3. js对象转换为jq对象 - $(js对象) - 可以使用jq的语法

```

## JQ操作页面的步骤

```python
    1.获取标签
    2.绑定事件
    3.操作标签

    $(\'h1\').click(function (ev) {
         jq的事件对象,但对js事件对象做了完全兼容
         #ev是浏览器返回的页面各个事件!!!
         console.log(ev);
         console.log(ev.clientX);
         console.log(ev.clientY);
     })

    $(\'h1\').on(\'click\', function (ev) {
        console.log(ev);
     })

    $(\'p\').click(function () {
        // 在jq事件中的this还是js对象,如果要使用jq功能,需要将this转换为jq对象
        console.log($(this));
        console.log($(this).text());
    });

     文本
     $(\'div\').text()  文本内容
     $(\'div\').html()  标签内容
     $(\'.inp\').val()  表单内容

     需求1:点击h1获取 自身文本内容、div的标签内容、input的表单内容
    $(\'h1\').click(function () {
        console.log($(this).text());
        console.log($(\'div\').html());
        console.log($(\'input\').val());
    })


```





## JQ的样式操作

```python
样式操作
    获取样式: $(div).css(\'css中的样式属性名\')
    设置样式:$div.css(\'css中的样式属性名\', \'属性值\');  // 单一设置
    $(\'div\').css({
        \'属性1\': \'值1\',
        ...
        \'属性n\': \'值n\',
    });
    $(\'div\').css(\'属性\', function (index, oldValue) {
        console.log(oldValue);
        // $(this) 可以拿到调用者对象
        return 返回值就是要设置的值(可以与自身其他属性,或是页面其他标签,或是自定义逻辑有关系);
    })
```

JQ对标签类名、属性的操作

```python
 增加类名:$(\'div\').addClass(\'类名\')
 删除类名:$(\'div\').removeClass(\'类名\')
 切换类名:$(\'div\').toggleClass(\'类名\')
 #通过类名的添加、删除,设置样式、隐藏等对页面的反馈
    $(\'.btn1\').click(function () {
        $(\'.box\').addClass(\'red\');
        $(\'.box\').removeClass(\'yellow\');
        $(\'.box\').removeClass(\'blue\');

        // $(\'.box\').toggleClass(\'red\');  // 无red类添加,反之去除
    });
    $(\'.btn2\').click(function () {
        let $box = $(\'.box\');
        $box[0].className = \'box\';
        $box.addClass(\'yellow\');
    });
    $(\'.btn3\').click(function () {
        $(\'.box\').addClass(\'blue\');
    });
   

四、属性
    
    获取属性值:$(\'div\').attr(\'属性名\')
    设置属性值:$(\'div\').attr(\'属性名\', \'属性值或函数\')
    删除属性值:$(\'div\').attr(\'属性名\', \'\')
    
    // https://ss2.baidu.com/-vo3dSag_xI4khGko9WTAnF6hhy/image/h%3D300/sign=705ffa145fda81cb51e685cd6267d0a4/4bed2e738bd4b31c5a30865b89d6277f9f2ff8c6.jpg
    $(\'h1\').click(function () {
        let h1_id = $(this).attr(\'id\');
        console.log(h1_id);


        $(\'img\').attr(\'src\', function () {
            return \'https://ss2.baidu.com/-vo3dSag_xI4khGko9WTAnF6hhy/image/h%3D300/sign=705ffa145fda81cb51e685cd6267d0a4/4bed2e738bd4b31c5a30865b89d6277f9f2ff8c6.jpg\'
        });
        $(this).attr(\'id\', \'\');
    })

```

## JQ其它 的操作文档的方法:

```python
一、快速定位到某一个jq对象
    
     1)在jq集合中快速拿到某一个jq对象: jq对象.eq(index)
     $(\'.d:eq(1)\')  ==  $(\'.d\').eq(1)#JQ对象数组
     $(\'.d\').eq(1).click(function () {
        alert(123)
     })
    2)在jq集合中都具有系统事件,在事件中如何区别每一个jq对象
    $(this) | 索引
    $(\'.d\').click(function () {
        // 方法index()取出标签所在层级的索引,不是在jq对象数组中的索引
        let index = $(this).index();
        console.log(index)
    });

二、通过自身快速定位到 "亲戚"
    上兄弟(们) prev(All)
    下兄弟(们) next(All)
    兄弟们 siblings
    孩子们 children
    父亲(们) parent 
  
    let $d2 = $(\'.d2\');
    console.log($d2);
    let next = $d2.next();
    console.log(next);
    let nexts = $d2.nextAll();
    console.log(nexts);
    let prev = $d2.prev();
    console.log(prev);
    let siblings = $d2.siblings();
    console.log(siblings);
    let children = $d2.children();
    console.log(children);
    let parent = $d2.parent();
    console.log(parent);
    
三、动态生成html标签
     let $table = $(\'<table></table>\');#生成标签对象
     $table.css({                    #给标签添加样式
        border: \'1px\'
     });
     $(\'body\').append($table);  // 加入到body最后
     $(\'body\').prepend($table);  // 加入到body最后
     $(\'p\').before($table);  // 加入到p之前
     $(\'p\').after($table);  // 加入到p之后

 需求:点击表格,在之后插入指定宽高的表格
    
     $(\'p\').click(function () {
        let inps = $(\'input\');
        // 表
        let table = $(\'<table border="1"></table>\');

        let row = inps.eq(1).val();
        console.log(typeof(inps.eq(1).val()));
        let col = inps.eq(2).val();
        //for (let i = 0; i < row; i++) {
            let tr = $(\'<tr></tr>\');
            table.append(tr);
            //for (let j = 0; j < col; j++) {
                let td = $(\'<td>\' + inps.eq(0).val() + \'</td>\');
                tr.append(td);
            }
        }
        $(this).after(table);
    })
```

JQ的链式操作:

```python
 例:本质是每次操作返回的还是  对象本身,所以可以继续点方法
$(\'h1\').css(\'color\', \'orange\').css(\'background\', \'red\').click(function () {
        console.log(this)
    }).text(\'修改标题\');


```

 

分类:

技术点:

相关文章: