01.jquery选择器

jquery选择器&基本操作

this是一个js原生对象--dom对象,假如选择器选择了一个集合,而且给集合中的每一个元素都绑定了事件,比如单击事件,当点击某个元素是,this的指代就是当前点击的dom元素,需要使用$(this)转换成jq对象然后进行相关操作

jQuery是一个快速、简洁的JavaScript框架,是继Prototype之后又一个优秀的JavaScript代码库(或JavaScript框架)。jQuery设计的宗旨 是“write Less,Do More”,即倡导写更少的代码,做更多的事情。它封装JavaScript常用的功能代码,提供一种简便的JavaScript设计模式,优 化HTML文档操作、事件处理、动画设计和Ajax交互

JavaScript框架:本质上就是一些js文件,封装了js的原生代码而已

一、使用步骤快速入门

  1. 下载jquery;
    • 目前有三大版本
      1. 1.x: 使用最广泛,适合一般项目,兼容ie678,官方只做bug,维护功能不在更新。
      2. 2.x: 很少被使用,不考虑兼容低版本浏览器,不兼容ie678,官方只做bug,维护功能不在更新。
      3. 3.x: 【我就使用这个!】一般特殊条件下使用,不兼容ie678,很多老的jquery插件不支持这个版本,功能在添加,bug在修护。
    • jquery-xxx.js 与 jquery-xxx.min.js的区别
      1. jquery-xxx.js:开发版本。给程序员看到,有良好的缩进。体积大一些
      2. jquery-xxx.min.js:生产版本。程序中使用,没有缩进。体积小,程序加载更快。
  2. 导入jquery的js文件:一般导入min.js文件
  3. 使用方式
var div1 = $("#div1")
alger(div1.html)

二、Jquery对象和js对象的区别与转换

js获取的一些元素可能是一个集合,需要遍历操作;而jquery通过选择器选择的是一个对象。这个对象里面
可能只有一个元素,也可能有多个元素;但是可以统一操作它们

<body>
    <div>aaaaa</div>
    <div>aaaaa</div>
</body>
<script>
$(function () {
    var $divs = $("div");
    $divs.text("bbbb");
})
  1. jquery对象在操作时,更加方便。
  2. jquery对象和js对象的方法不通用,可以将他们进行相互的转换,然后调用对应的方法
  3. jquery对象和js对象的相互转换
    1. jq --> js: jq对象[索引] 或者 jq对象.get(索引)
    2. js --> jq: $(js对象) 例如:$(this)
<body>
    <div>aaaaa</div>
    <div>aaaaa</div>
</body>
<script>
$(function () {
    // jq --> js
    var $divs = $("div");
    $divs.text("bbbb");
    $divs[0].innerText = "aaaa"

    // js --> jq
    var divs = document.getElementsByTagName("div")
    $(divs).html("拉拉啊")
})

三、选择器:筛选具有相似特征的元素(标签)

1.基本操作

  1. 入口函数

简写形式【推荐】, 后面的案例代码都是放在这个里面的

$(function () {
    ...
})

完整形式(了解)

$(document).ready(function () {

})
  • window.onload和$(function)的区别
    1. window.onload只能定义一次,如果定义多次,后面的将会将前面的覆盖掉
    2. $(function)可以定义多次。
  1. 事件绑定
$("#b1").click(function () {
    alert("点击了我")
})
  1. 样式控制:css方法
<button id="b1">点击事件</button>
<button id="b2">点击事件</button>

$("#b1").css("background-color", "pink")
$("#b2").css({"background-color":"pink","color":"white"})

2.选择器分类

1.基本选择器

  1. 标签选择器(元素选择器)
    • $("html标签名"):;选择对应的标签
  2. id选择器
    • $("#id的属性值")::选择该id值对应的标签
  3. 类选择器
    • $(".class类名"): :选择具有该类名的元素。
  4. 并集选择器
    • $("选择器1,选择器2..."): 选择这些集合
  5. 通配符选择器【很少使用】
    • $("*")

2.层级选择器

  1. 后代选择器
    • $("A B"): 选择A元素内部的所有B元素
  2. 子选择器
    • $("A>B"): 选择A元素内部的所有B子元素
  3. 毗邻选择器
    • $("A+P"): 匹配A后面跟着的一个P,之间不能有其他元素
  4. 兄弟选择器
    • $("A~P"): 匹配A同级后面所有的P。

3.属性选择器

  1. 属性名称选择器
    • $("A[属性名]"):包含指定属性的选择器
  2. 属性选择器
    • $("A[属性名='值']"):包含指定属性等于特定值的选择器。
    • $("A[属性名!='值']"): 不包含指定属性等于特定值的选择器。
    • $("A[属性名^='值']"): 包含指定属性以特定值开头的选择器。
    • $("A[属性名$='值']"): 包含指定属性以特定值结尾的选择器。
    • $("A[属性名*='值']"): 匹配给定的属性是以包含某些值的元素。
  3. 复合属性选择器
    • $("A[属性名='值'][]..."): 包含多个属性条件的选择器

4.过滤选择器

一般放在其他过滤器后面,如 $("div:first")

  1. 首元素选择器
    • :first: 获取选择的元素中的第一个元素
    • $('span').first(): 这种方式也可以
  2. 尾元素选择器
    • :last: 获取选择元素中的最后一个元素
  3. 非元素选择器
    • :not(selector) 不包括指定内容的元素,
$("div:not(:last)").text("我不是最后一个")
  1. 偶数选择器
    • :even: 偶数,从0开始计数
  2. 奇数选择器
    • :odd: 奇数,从0开始计数
  3. 等于索引选择器
    • :eq(index): 指定索引元素
  4. 大于索引选择器
    • :gt(index): 大于指定索引的元素
  5. 小于索引选择器
    • :lt(index): 小于执行索引元素
  6. 标题选择器
    • :header: 获得标题(h1~h6)元素,固定写法
<h1></h1>
<h2></h2>
$(":header").text("我是一个标题")

5.表单过滤选择器

配合表单元素使用

  1. 可用元素选择器
    • :enabled:获得可用元素
  2. 不可用元素选择器
    • :disabled: 获得不可用元素
  3. 单选/复选框选中选择器
    • :checked: 获得单选/复选框中的元素
  4. 下拉框选中选择器
    • :selected: 获得下拉框中的元素
  5. 获取input框type属性:
    • :radio: 类似的还有【:submit:file:text....】
//选择input的type类型可以直接用:属性值的方式
$(':radio');

//1.获取单选框中的value值(选中值标记为checked)
$('input[type=radio]:checked').val();

//2.获取复选框中的value值 仅仅获取第一个值 @@@@@->证明我猜的底层实现是对的
$('input[type=checkbox]:checked').val();

//3.下拉列表被选中的值(下拉列表中的选中用selected)
$('#timespan option:selected').val();

//设置单选值
$('input[type=radio]').val('113');

//设置复选框
$('input[type=checkbox]').val('b');

//设置下拉列表 multiple属性可选
$(':selected').val('3');

//文本框 设置值
$('input[type=text]').val('222');

四、DOM操作

sq选择器选择是一个集合,如果需要【获取】(不包含设置,设置是统一设置)某个元素的属性或者内容,默认获取第一个(index=0)的元素的内容

1.内容操作

  1. html(): 获取/设置元素的标签体内容
    • html(): 获取
    • html(...): 设置
  2. text(): 获取/设置元素的标签体纯文本内容
    • text(): 获取
    • text(...): 设置
  3. val(): 获取/设置元素的value属性值。
    • val(): 获取值
    • val(...): 设置值

2.属性操作

1.通用属性操作?【不行就换呗!】

  1. 操作元素自定义属性
    1. attr(): 获取/设置元素的属性
      • attr("attribute") :获取属性值
      • attr("attribute", "value") :设置属性值
      • attr({"attr1":"val1","attr2":"val2"...}) :多个属性值
      • 注意,attr如果设置class属性会覆盖,建议用专门的方法设置class属性
        2. removeAttr("attribute"):删除属性

<input id = "test1"type="text" value="" style="background-color: red">
<input id = "test2" type="text" disabled>

$("#test1").attr("value", "test1")
$("#test2").attr("value", "test2")
$("#test1").removeAttr("style")
$("#test2").removeAttr("disabled")
  1. 操作元素固有的属性(w3c文档对应标签列出的属性
    1. prop():获取/设置元素的属性,prop()获取在匹配的元素集中的第一个元素的属性值.它是对当前匹配到的dom对象设置属性
      • prop("attribute") :获取
      • prop("attribute", "value") :设置
    2. removeProp("attribute"): 删除属性
<input id="test1" type="text">
var test1 = $("#test1").prop("value")
console.log(test1)

2.对class属性的操作

  1. addClass(): 添加class属性值,支持同时添加多个
  2. removeClass(): 删除class属性值,支持同时删除多个
  3. toggleClass(): 切换class属性
    • toggleClass("one"): 已存在one,则删除,不存在,则添加,支持同时切换多个
  4. hasClass('xxx'): 判断当前对象内部是否有响应的类名,返回布尔值。
<input id="test1" type="text" class="one">
<input id="test2" type="text" class="one two three">

var test1 = $("#test1")
test1.addClass("two three")
test1.removeClass("two three")
test1.toggleClass("two three")
var test2 = $("#test2")
test2.toggleClass("two three")

3.设置css属性

  1. css()
    • 只设置一个的简写:css("attribute", "values")
    • 多个: css({"attr1":"value1","attr2":"value2"...})

4.获得父/子节点

  1. parent():获取父节点
  2. children("选择器"):获取子节点

5.同辈元素选择

  1. prev(): 查找当前元素的前一个元素【同辈】
  2. prevAll(): 查找当前元素之前的所有元素【同辈】
    • prevAll("选择器")
  3. siblings(): 匹配同辈元素汇总相关的对象(不包含本身)
    • siblings("选择器")

案例:鼠标移动变大变小效果

<style>
    li{width: 100px;height: 30px;margin-top: 5px;}
    li.active{height: 40px;}
</style>
<body>
<ul style="list-style: none;">
    <li></li><li></li><li></li><li></li>
</ul>
</body>
<script>
$(function () {
    $("li:even").css("background","darkcyan");
    $("li:odd").css("background","yellow");
    $("li").hover(function () {
        $(this).addClass("active").siblings("li").removeClass("active")
    })
})
</script>

3.CRUD操作

常规逻辑方式【推荐使用

如果添加的内容是当前页面中的某些元素节点,那么这些元素将从原位置上消失。简言之,就是一个移动操作

  1. append(): 父元素将子元素追加到末尾

    • 对象1.append(对象2):将对象2添加到对象1元素内部,在末尾
  2. prepend(): 父元素将子元素追加到开头

    • 对象1.prepend(对象2):将对象2添加到对象1内部,在开头
  3. after(): 添加元素到元素后边

    • 对象1.after(对象2): 将对象2添加到对象1后面,兄弟关系
  4. before(): 添加元素到元素前面

    • 对象1.before(对象2): 将对象2添加对象1前面,兄弟关系
  5. clone(): 复制操作

    • clone(): 克隆匹配的DOM元素并且选中这些克隆的副本。
    • clone(true): 元素以及其所有的事件处理并且选中这些克隆的副本(简言之,副本具有与真身一样的事件处理能力)
  6. replaceWith(): 替换

$('被替换的选择器').replaceWith('<button>替换成按钮</button>');
$('<a href="#">替换的超链接</a>').replaceAll('被替换的选择器');
  1. remove(): 移除元素

    • 对象.remove(): 将对象删除掉
  2. empty(): 清空元素的所有后代元素

    • 对象.empty(): 将对象的后代元素全部清空,但是保留当前对象以及其属性节点【内容全没了】
  3. detach()移除匹配的节点元素 删除节点后返回节点数组 事件会保留

var $btn = $('button').detach();
$('ul').append($btn);

变态方式(始终不明白下面这4个存在的意义?)

  1. appendTo():

    • 对象1.appendTo(对象2):将对象1添加到对象2内部,在末尾
  2. prependTo()

    • 对象1.prepend(对象2):将对象1添加到对象2内部,在开头
  3. insertAfter()

    • 对象1.insertAfter(对象2):将对象1添加到对象2后面,兄弟关系
  4. insertBefore()

    • 对象1.insertBefore(对象2): 将对象1添加到对象2前面,兄弟关系

五、jquery的位置属性

  1. position 获取匹配元素相对于父元素的偏移
$('选择器').position().left
  1. scrollTop/scrollLeft获取匹配元素相对于滚动条卷起的位置信息(就是滚过的区域)

scroll实时监听功能

$(document).scroll(function() {
    $(document).scrollLeft();
    $(document).scrollTop();
})
  1. offset 获取匹配元素在当前视口的相对偏移 相对于浏览器左上角
$("选择器").offset();
$("选择器").offset().left;
$("选择器").offset().top;
$("选择器").offset().left;
  1. 获取/设置元素的宽高
var w = $('选择器').width();
var h = $('选择器').height();
$(('选择器').width(400);
  1. 获取innerWidth=width + (2 * padding) 不包括边框 获取匹配元素的内部宽度
$('选择器').innerWidth()

6.获取outerWidth=width + 2 * (padding + border) 获取匹配元素的外部宽度

$('选择器').outerWidth()
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,590评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 86,808评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,151评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,779评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,773评论 5 367
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,656评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,022评论 3 398
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,678评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,038评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,659评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,756评论 1 330
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,411评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,005评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,973评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,053评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,495评论 2 343

推荐阅读更多精彩内容

  • 概要 64学时 3.5学分 章节安排 电子商务网站概况 HTML5+CSS3 JavaScript Node 电子...
    阿啊阿吖丁阅读 9,093评论 0 3
  • 第一部分 HTML&CSS整理答案 1. 什么是HTML5? 答:HTML5是最新的HTML标准。 注意:讲述HT...
    kismetajun阅读 27,421评论 1 45
  • 一、样式篇 第1章 初识jQuery (1)环境搭建 进入官方网站获取最新的版本 http://jquery.co...
    凛0_0阅读 3,350评论 0 44
  • https://v.qq.com/x/page/b0552zsph5z.html 创始人本·富尔曼先生用20分钟讲...
    郭海霞阅读 235评论 0 0
  • 今天集团办公室下发了一份文件,要求各部门人员自愿报名去外地的分部调研。老大在部门里面征求大家意见,问有没有要报名的...
    b7b36cb0d7ab阅读 1,059评论 0 1