# jQuery

# 基础用法

1 引入jQuery
2 页面加载完成再获取DOM元素 

<script src="js/jquery-1.12.4.min.js"></script>
<script>
    window.onload = function(){
        var oDiv = document.getElementById('div01');
        alert('原生就是获取的div:' + oDiv);
    };
    /*
    $(document).ready(function(){
        var $div = $('#div01');
        alert('jquery获取的div:' + $div);
    });
    */
    // 上面ready的写法可以简写成下面的形式:
    $(function(){
        var $div = $('#div01');
        alert('jquery获取的div:' + $div);
    }); 
</script>

<div id="div01">这是一个div</div>

# 选择器

标签选择器
类选择器
id选择器
层级选择器
属性选择器

选择器的优先级:
important
内联样式
id选择器
类选择器,伪类选择器,属性选择器
元素选择器,伪元素

实例代码
$('#myId') //选择id为myId的标签
$('.myClass') // 选择class为myClass的标签
$('li') //选择所有的li标签
$('#ul1 li span') //选择id为ul1标签下的所有li标签下的span标签
$('input[name=first]') // 选择name属性等于first的input标签

增强
$('.myClass:even') 	index为偶数的元素
$('.myClass:odd') 	index为奇数的元素

# 筛选器

在选择标签的集合里面筛选自己需要的标签

has(选择器名称)方法,表示选取包含指定选择器的标签
eq(索引)方法,表示选取指定索引的标签(下标从0开始)
first()方法,列表第一个元素
last()方法,列表最后一个元素
$().hasClass("类名");	判断指定元素是否包含该类名的元素。
$().is(selector);	判断指定元素中是否有符合条件的存在。
$().not(selector|function)	选择不符合条件的元素

var $div = $("div").has("#app");  
var $div = $("div").eq(1);  

# DOM查找

以选择的标签为参照,然后获取转移后的标签

原生js之间的导航
● 前兄弟元素:previousElementSibling 
● 后兄弟元素:nextElementSibling 
● 父元素:parentElement 
● 子元素:children 
● 第一个子元素:firstElementChild 
● 最后一个子元素:lastElementChild

$('#box').prev(); 表示选择id是box元素的上一个的同级元素
$('#box').prevAll(); 表示选择id是box元素的上面所有的同级元素
$('#box').next(); 表示选择id是box元素的下一个的同级元素
$('#box').nextAll(); 表示选择id是box元素的下面所有的同级元素
$('#box').parent(); 表示选择id是box元素的父元素
$('#box').children(); 表示选择id是box元素的所有子元素
$('#box').siblings(); 表示选择id是box元素的其它同级元素
$('#box').find(selector);  find 方法可以查找到指定元素的所有后代元素。
$('#box').find('.myClass'); 表示选择id是box元素的class等于myClass的元素

<ul id="list">
    <li>1</li>
    <li>2</li>
    <li>3</li>
    <li>4</li>
    <li>5</li>
</ul>
$list = $("#list li");
console.log($list.first().next().text());   输出2 
console.log($list[0]);		jQuery对象 转换成  DOM元素 > jquery对象[0]
console.log($($list[0]));	DOM元素 转成 jQuery 对象   > $(DOM对象)

# 元素内容

原生js:innerHTML属性
document.querySelector("div").innerHTML = "hhh"
jQuery:html()方法可以获取和设置标签的html内容
$(function(){
        var $div = $("#div1");
        //  获取标签的html内容
        var result = $div.html();
        alert(result);
        //  设置标签的html内容,之前的内容会清除
        $div.html("<span style='color:red'>你好</span>");
        //  追加html内容
        $div.append("<span style='color:red'>你好</span>");
    });

原生js:textContent属性
text() 获取匹配元素包含的文本内容
语法:$('#box').text();
设置该所有的文本内容
$('#box').text('<a href="https://www.baidu.com">百度一下</a>');
注意:值为标签的时候 不会被渲染为标签元素 只会被当做值渲染到浏览器中
<a href="https://www.baidu.com">百度一下</a>  只会渲染成这样

# 元素属性

操作css原生js的写法:	 
ele.style.cssText = `width:100px; height:100px;`
jQuery:css()方法可以给标签设置样式属性		
$div.css({"color":"red", fontSize: "36px"})
$list.css("color", "red");

操作类的原生js写法:
ele.className.add()
ele.className.remove()
ele.className.toggle()
ele.className.contain()

jQuery写法
addClass(添加多个类名)
为每个匹配的元素添加指定的类名。
$('div').addClass("box box2");//追加多个类名
removeClass
$('div').removeClass('box');
移除全部的类
$('div').removeClass();
toggleClass
如果存在(不存在)就删除(添加)一个类。
$('span').click(function(){
    //动态的切换class类名为active
    $(this).toggleClass('active')
})

原生js获取元素的attribute:ele.name = "xxx"  ele.id = "***"
attr()	设置属性值或者 返回被选元素的属性值
//获取值:attr()设置一个属性值的时候 只是获取值
var id = $('div').attr('id')
//设置一个值 设置div的class为box
$('div').attr('class','box')

removeAttr()  移出属性
//删除单个属性
$('#box').removeAttr('name');
//删除多个属性
$('#box').removeAttr('name class');

jQuery:prop()方法可以设置标签的其它属性 $div.prop({"href":"http://www.baidu.com","title":'baidu',"class":"a01"})
prop()用法和attr的用法基本一致,只不过prop用来获取radio,checkbox,select这种返回值为truefalse属性值的操作
$('input[type="checkbox"]').first().prop('checked')   // false
$('input[type="checkbox"]').first().attr('checked')	  // undefined
removeProp()  移出属性

原生js:ele.value
jQuery:val()方法可以获取value属性和设置value属性
val()用于表单控件中获取值,比如input textarea select等等
设置值的话:$('input').val('设置了表单控件中的值')

# DOM元素的增删改查

image-20230405213902772

原生js
createElement("div")
node.append()
node.prepend()
node.before()
node.after()
node.replaceWith(newNode)	用newNode替换node
node.remove()
node.clone()	是否深度克隆

jQuery方法
元素.append(子元素)  插入末尾 (内部插入)  
元素.prepend(子元素) 插入开头 (内部插入)
元素.after()  插入末尾 (外部插入)  
元素.before() 插入开头 (外部插入)
元素.replaceWith(newNode)	用newNode替换node
元素.remove()		删除了整个标签(自身和子节点都没有了)
元素.empty();      清空选中元素中的所有后代节点(保留自身,删除子节点)
元素.clone()		克隆元素
$("b").clone().prependTo("p");

# 事件

click() 鼠标单击
blur() 元素失去焦点
focus() 元素获得焦点
mouseover() 鼠标进入(进入子元素也触发)
mouseout() 鼠标离开(离开子元素也触发)
ready() DOM加载完成

this指的是当前发生事件的对象,但是它是一个原生js对象
$(this) 指的是当前发生事件的jquery对象

原生js:
ele.onclick = function(){console.log(123)}
jQuery
$div.click = function(){}

<script>
    $(function(){
        var $li = $('.list li');
        var $button = $('#button1')
        var $text = $("#text1");
        var $div = $("#div1")

        //  鼠标点击
        $li.click(function(){             
            // this指的是当前发生事件的对象,但是它是一个原生js对象
            // this.style.background = 'red';

            // $(this) 指的是当前发生事件的jquery对象
            $(this).css({'background':'gold'});
            // 获取jquery对象的索引值,通过index() 方法
            alert($(this).index());
        });

        //  一般和按钮配合使用
        $button.click(function(){
            alert($text.val());
        });

        //  获取焦点
        $text.focus(function(){
            $(this).css({'background':'red'});

        });

        //  失去焦点
        $text.blur(function(){
            $(this).css({'background':'white'});

        });

        //  鼠标进入
        $div.mouseover(function(){
            $(this).css({'background':'gold'});

        });

        //  鼠标离开
        $div.mouseout(function() {
            $(this).css({'background':'white'});
        });
    });
</script>

<div id="div1">
    <ul class="list">
        <li>列表文字</li>
        <li>列表文字</li>
        <li>列表文字</li>
    </ul>

    <input type="text" id="text1">
    <input type="button" id="button1" value="点击">
</div>

# 事件代理

delegate(childSelector,event,function)
childSelector: 子元素的选择器
event: 事件名称,比如: 'click'
function: 当事件触发执行的函数

元素js
document.querySelector("ul").onclick = function (e) {
    if (e.target.tagName === "LI") {
        console.log(e.target.textContent); // e指的是这次事件
        console.log(this);   // this 指的是 ul元素
    }
};

<ul id="list">
    <li>1</li>
    <li>2</li>
    <li>3</li>
    <li>4</li>
    <li>5</li>
  </ul>
  <script>
    $(function () {
      $list = $("#list");
      // 父元素ul 来代理 子元素li的点击事件
      $list.delegate("li", "click", function () {
        // $(this)表示当前点击的子元素对象
        $(this).css({ background: "red" });
      });
    });

AJAX

jquery封装成了一个方法$.ajax(),我们可以直接用这个方法来执行ajax请求。

<script>
    $.ajax({
    // 1.url 请求地址
    url:'http://t.weather.sojson.com/api/weather/city/101010100',
    // 2.type 请求方式,默认是'GET',常用的还有'POST'
    type:'GET',
    // 3.dataType 设置返回的数据格式,常用的是'json'格式,还有xml,html,text格式
    dataType:'JSON',
    // 4.data 设置发送给服务器的数据, 没有参数不需要设置
​	data: {},
    // 5.success 设置请求成功后的回调函数
    success:function (response) {
        console.log(response);    
    },
    // 6.error 设置请求失败后的回调函数
    error:function () {
        alert("请求失败,请稍后再试!");
    },
    // 7.async 设置是否异步,默认值是'true',表示异步,一般不用写
    async:true
});
</script>

简写
$.get和$.post方法的参数说明:
$.get(url,data,success(data, status, xhr),dataType).error(func)
$.post(url,data,success(data, status, xhr),dataType).error(func)
url 请求地址
data 设置发送给服务器的数据,没有参数不需要设置
    success 设置请求成功后的回调函数
    data 请求的结果数据
    status 请求的状态信息, 比如: "success"
    xhr 底层发送http请求XMLHttpRequest对象
dataType 设置返回的数据格式
    "xml"
    "html"
    "text"
    "json"
error 表示错误异常处理
func 错误异常回调函数

<script>
    $(function(){
        /*
         1. url 请求地址
         2. data 设置发送给服务器的数据, 没有参数不需要设置
         3. success 设置请求成功后的回调函数
         4. dataType 设置返回的数据格式,常用的是'json'格式, 默认智能判断数据格式
        */ 
        $.get("http://t.weather.sojson.com/api/weather/city/101010100", function(dat,status){
            console.log(dat);
            console.log(status);
            alert(dat);
        }).error(function(){
            alert("网络异常");
        });

        /*
         1. url 请求地址
         2. data 设置发送给服务器的数据, 没有参数不需要设置
         3. success 设置请求成功后的回调函数
         4. dataType 设置返回的数据格式,常用的是'json'格式, 默认智能判断数据格式
        */ 
        $.post("test.php", {"func": "getNameAndTime"}, function(data){
            alert(data.name); 
            console.log(data.time); 
        }, "json").error(function(){
            alert("网络异常");
        }); 
    });
</script>