3 jQuery

1. jQuery 属性操作

1.1 设置获取元素固有属性值 prop()

所谓元素固有属性就是元素本身自带的属性,比如元素里面的 href ,比如 元素里面的type。

  1. 获取属性语法
prop('属性')
<a href="http://www.itcast.cn" title="都挺好">
<script>
	$(function(){
	element.prop('属性名')
	console.log($("a").prop("href"))
	$("a").prop("title", "我们都挺好")
})
</script>
  1. 设置属性语法
prop('属性','属性值')

1.2 设置或获取元素自定义属性值 attr()

用户自己给元素添加的属性,我们称之为自定义属性。
比如给div添加index=”1“

  1. 获取属性语法
attr('属性')
  1. 设置属性语法
attr('属性', '属性值')

1.3 数据缓存 data()

data() 方法可以在指定的元素上存取数据,并不会修改DOM元素解构。一旦页面刷新,之前存放的数据都会被移除。

  1. 附加数据语法
data('name','value')//向被选元素附加数据
  1. 获取数据语法
data('name')//向被选元素获取数据
<!DOCTYPE html>
<html lang="en">

  <head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <script src="jquery.min.js"></script>
  </head>

  <body>
    < a href=" " title="都挺好">都挺好</ a>
    <input type="checkbox" name="" id="" checked>
    <div index="1" data-index="2">我是div</div>
    <span>123</span>
    <script>
      $(function () {
        //1. element.prop("属性名") 获取元素固有的属性值
        console.log($("a").prop("href"));
        $("a").prop("title", "我们都挺好");
        $("input").change(function () {
          console.log($(this).prop("checked"));

        });
        // console.log($("div").prop("index"));
        
        // 2. 元素的自定义属性 我们通过 attr()
        console.log($("div").attr("index"));
        $("div").attr("index", 4);
        console.log($("div").attr("data-index"));
        // 3. 数据缓存 data() 这个里面的数据是存放在元素的内存里面
        
        $("span").data("uname", "andy");
        console.log($("span").data("uname"));
        // 这个方法获取data-index h5自定义属性 第一个 不用写data-  而且返回的是数字型
        console.log($("div").data("index"));
        
      })
    </script>
  </body>

</html>

2. jQuery 元素操作

2.1 遍历元素

  • 语法1:$('div').each(function(index, domEle){xxx})

demEle是每个DOM元素对象,不是jQuery对象,所以想要使用jQuery方法,需要给这个dom元素转换为jQuery对象$(domEle)

<script>
  $(function() {
  // $("div").css("color", "red");
  // 如果针对于同一类元素做不同操作,需要用到遍历元素(类似for,但是比for强大)
  var sum = 0;
  // 1. each() 方法遍历元素 
  var arr = ["red", "green", "blue"];
  $("div").each(function(i, domEle) {
    $(domEle).css("color", arr[i]);
    // sum += parseInt($(domEle).text());
  })
  // console.log(sum);


})
</script>
  • 语法2:$.each(object, function(index, domEle){xxx})

$.each()方法可用于遍历任何对象,主要用于数据处理,比如数组,对象。

// 2. $.each() 方法遍历元素 主要用于遍历数据,处理数据
$.each($("div"), function(i, ele) {
  console.log(i);
  console.log(ele);

});
// $.each(arr, function(i, ele) {
//     console.log(i);
//     console.log(ele);


// })
$.each({
  name: "andy",
  age: 18
}, function(i, ele) {
  console.log(i); // 输出的是 name age 属性名
  console.log(ele); // 输出的是 andy  18 属性值


})

2.2 创建元素

语法:

$("<li></li>")

2.3 添加元素

  1. 内部添加
element.append("内容")

把内容放入匹配元素内部最后面

element.prepend("内容")

把内容放到匹配元素内部最前面

  1. 外部添加
element.after("内容")//放在后面
element.before("内容")//放在前面

内部添加元素,生成之后,他们是父子关系。
外部添加元素,生成之后,他们是兄弟关系。

2.4 删除元素

element.remove() //删除匹配元素本身
element.empty()  //删除匹配元素集合中所有子结点
element.html("") //清空匹配的元素内容

2.5 jQuery 尺寸、位置操作

2.5.1 jQuery 尺寸

语法用法
width()/height()获取设置元素 width 和 height 大小
innerWidth()/innerHeight()获取匹配元素宽度和高度值 包含padding
outerWidth()/outerHeight()获取匹配元素宽度和高度值 包含padding和border
outerWidth(true)/outerHeight(true)获取匹配元素宽度和高度值 包含padding和border和margin
  • 以上参数为空,则是获取相应值,返回的是数字型
  • 如果参数为数字,则是修改相应值
  • 参数可以不必写单位

2.5.2 jQuery 位置

主要有三个:offset()position()scrollLeft()/scrollTop()

  1. offset()
    (1)获取设置距离文档的位置,跟父级没有关系
    (2)offset().top 获取距离文档顶部的距离
    (3)offset().left 获取距离文档左侧的距离
    (4)可以设置元素的偏移:offset({top: 10, left: 30})
// 1. 获取设置距离文档的位置(偏移) offset
console.log($(".son").offset());
console.log($(".son").offset().top);

$(".son").offset({
  top: 200,
  left: 200
});
  1. position()
    (1)返回被选元素相对于带有定位的父级偏移坐标,如果父级都没有定位,则以文档为主
    (2)这个方法只能获取不能设置偏移
  2. scrollLeft()/scrollTop()
    (1)设置或返回被选元素被卷去的头部和左侧
    (2)不跟参数是获取,参数为不带单位的数字则是设置被卷去的头部

案例:带有动画的返回顶部
(1)animate动画函数里面有个 scrollTop 属性,可以设置位置

$(function () {
  $(document).scrollTop(100);
  // 被卷去的头部 scrollTop()  / 被卷去的左侧 scrollLeft()
  // 页面滚动事件
  var boxTop = $(".container").offset().top;
  $(window).scroll(function () {
    // console.log(11);
    console.log($(document).scrollTop());
    if ($(document).scrollTop() >= boxTop) {
      $(".back").fadeIn();
    } else {
      $(".back").fadeOut();
    }
  });

  // 返回顶部
  $(".back").click(function () {
    // $(document).scrollTop(0);
    $("body, html").stop().animate({
      scrollTop: 0
    });
    // $(document).stop().animate({
    //     scrollTop: 0
    // }); 不能是文档而是 html和body元素做动画
  })
})

案例:品优购电梯导航

$(function() {
  // 当我们点击了小li 此时不需要执行 页面滚动事件里面的 li 的背景选择 添加 current
  // 节流阀  互斥锁 
  var flag = true;
  // 1.显示隐藏电梯导航
  var toolTop = $(".recommend").offset().top;
  toggleTool();

  function toggleTool() {
    if ($(document).scrollTop() >= toolTop) {
      $(".fixedtool").fadeIn();
    } else {
      $(".fixedtool").fadeOut();
    };
  }

  $(window).scroll(function() {
    toggleTool();
    // 3. 页面滚动到某个内容区域,左侧电梯导航小li相应添加和删除current类名


    if (flag) {
      $(".floor .w").each(function(i, ele) {
        if ($(document).scrollTop() >= $(ele).offset().top) {
          console.log(i);
          $(".fixedtool li").eq(i).addClass("current").siblings().removeClass();

        }
      })
    }



  });
  // 2. 点击电梯导航页面可以滚动到相应内容区域
  $(".fixedtool li").click(function() {
    flag = false;
    console.log($(this).index());
    // 当我们每次点击小li 就需要计算出页面要去往的位置 
    // 选出对应索引号的内容区的盒子 计算它的.offset().top
    var current = $(".floor .w").eq($(this).index()).offset().top;
    // 页面动画滚动效果
    $("body, html").stop().animate({
      scrollTop: current
    }, function() {
      flag = true;
    });
    // 点击之后,让当前的小li 添加current 类名 ,姐妹移除current类名
    $(this).addClass("current").siblings().removeClass();
  })
})

3. jQuery 事件

3.1 jQuery 事件注册

element.事件(function(){})
$("div").click(function(){事件处理程序})

其他事件和原生基本一致。比如 mouseover、mouseout、blur、focus、change、keydown、keyup、resize、scroll等。

$("div").click(function(){
	$(this).css("background", "purple")
})

3.2 jQuery事件处理

3.2.1 事件处理 on() 绑定事件

element.on(events, [selector], fn)
  • events:一个或多个用空格分隔的事件类型,如"click"或"keydown" 。
  • selector: 元素的子元素选择器 。
  • fn:回调函数 即绑定在元素身上的侦听函数。
$("div").on({
	mouseenter: function(){
		$(this).css("background", "skyblue")
	}
	click: function(){
		$(this).css("background", "purple")
	}
})
//或者
$("div").on("mouseenter mouseleave", function(){
	$(this).toggleClass("current")
})
  1. on()方法优势1:
    可以绑定多个事件,多个处理事件程序
  2. on()方法优势2:
    可以事件委派操作。事件委派的定义就是,把原来加给子元素身上的事件绑定在父元素身上,就是把时间委派给父级元素
$("ul").on("click", "li", function(){})

事件是绑定在”ul“身上的,所以只有一个 ul 元素添加了点击事件,但是我们的触发对象是”li“ ,只有点击了小”li“才触发,有事件冒泡,会冒到父级上,父级身上有个点击事件,所以执行。

  1. on()方法优势3:
    动态创建的元素,click() 没有办法绑定事件,on()可以给动态生成的元素绑定事件。
var li = $("<li>我是后来创建的</li>");
$("ol").append(li);

$("ol li").click(function () {
    alert(11);
})
$("ol").on("click", "li", function () {
    alert(11);
})

案例:发布微博案例

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        * {
            margin: 0;
            padding: 0;
        }
        ul {
            list-style: none;
        }
        .box {
            width: 600px;
            margin: 100px auto;
            border: 1px solid #000;
            padding: 20px; 
        }
        textarea {
            width: 450px;
            height: 160px;
            outline: none;
            resize: none;
        }
        ul {
            width: 450px;
            padding-left: 80px;
        }
        ul li {
            line-height: 25px;
            border-bottom: 1px dashed #cccccc;
            display: none;
        }
        input {
            float: right;
        }
        ul li a {
            float: right;
        }
    </style>
    <script src="jquery.min.js"></script>
    <script>
        $(function(){
            //1.点击发布按钮,动态创建一个小li,放入文本框的内容和删除按钮,并且添加到ul中
            $(".btn").on("click", function(){
                var li = $("<li></li>");
                li.html($(".txt").val() + "<a href='javascript:;'>删除</a>");
                $("ul").prepend(li);
                li.slideDown();
                $(".txt").val("");
            })
            //2.点击删除按钮,可以删除当前的微博留言li
            $("ul").on("click", "a", function(){
                $(this).parent().slideUp(function(){
                    $(this).remove();
                });
            })
        })
    </script>
</head>
<body>
    <div class="box" id="weibo">
        <span>微博发布</span>
        <textarea name="" class="txt" cols="30" rows="10"></textarea>
        <button class="btn">发布</button>
        <ul>

        </ul>
    </div>
</body>
</html>

3.2.2 事件处理off()解绑事件

$("div").off()//解除div身上所有事件
$("div").off("click")//解除div身上的点击事件
$("ul").off("click","li")//解绑事件委托

如果有的事件只想触发一次,可以使用 one() 来绑定事件

<p></p>
$("p").one("click", function(){alert(11)})

3.2.3 自动触发事件 trigger()

有些事件希望自动触发, 比如轮播图自动播放功能跟点击右侧按钮一致。可以利用定时器自动触发右侧按钮点击事件,不必鼠标点击触发。

$("div").on("click", function() {
  alert(11);
}); 

element.click()  // 第一种简写形式

element.trigger("type") // 第二种自动触发模式
// $("p").trigger("click"); // 此时自动触发点击事件,不需要鼠标点击

element.triggerHandler(type)  // 第三种自动触发模式 
// triggerHandler模式不会触发元素的默认行为,这是和前面两种的区别。

3.3 jQuery 事件对象

element.on(events, [selector], function(event){})

阻止默认行为:event.preventDefault() 或者 return false
阻止冒泡:event.stopPropagation()

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值