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的原生代码而已
一、使用步骤快速入门
- 下载jquery;
- 目前有三大版本
- 1.x: 使用最广泛,适合一般项目,兼容ie678,官方只做bug,维护功能不在更新。
- 2.x: 很少被使用,不考虑兼容低版本浏览器,不兼容ie678,官方只做bug,维护功能不在更新。
- 3.x: 【我就使用这个!】一般特殊条件下使用,不兼容ie678,很多老的jquery插件不支持这个版本,功能在添加,bug在修护。
- jquery-xxx.js 与 jquery-xxx.min.js的区别
- jquery-xxx.js:开发版本。给程序员看到,有良好的缩进。体积大一些
- jquery-xxx.min.js:生产版本。程序中使用,没有缩进。体积小,程序加载更快。
- 目前有三大版本
- 导入jquery的js文件:一般导入min.js文件
- 使用方式
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");
})
- jquery对象在操作时,更加方便。
- jquery对象和js对象的方法不通用,可以将他们进行相互的转换,然后调用对应的方法
- jquery对象和js对象的相互转换
- jq --> js:
jq对象[索引]
或者jq对象.get(索引)
- js --> jq:
$(js对象)
例如:$(this)
- jq --> js:
<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.基本操作
- 入口函数
简写形式【推荐】, 后面的案例代码都是放在这个里面的
$(function () {
...
})
完整形式(了解)
$(document).ready(function () {
})
- window.onload和$(function)的区别
- window.onload只能定义一次,如果定义多次,后面的将会将前面的覆盖掉
- $(function)可以定义多次。
- 事件绑定
$("#b1").click(function () {
alert("点击了我")
})
- 样式控制:css方法
<button id="b1">点击事件</button>
<button id="b2">点击事件</button>
$("#b1").css("background-color", "pink")
$("#b2").css({"background-color":"pink","color":"white"})
2.选择器分类
1.基本选择器
- 标签选择器(元素选择器)
-
$("html标签名")
:;选择对应的标签
-
- id选择器
-
$("#id的属性值")
::选择该id值对应的标签
-
- 类选择器
-
$(".class类名")
: :选择具有该类名的元素。
-
- 并集选择器
-
$("选择器1,选择器2...")
: 选择这些集合
-
- 通配符选择器【很少使用】
$("*")
2.层级选择器
- 后代选择器
-
$("A B")
: 选择A元素内部的所有B元素
-
- 子选择器
-
$("A>B")
: 选择A元素内部的所有B子元素
-
- 毗邻选择器
-
$("A+P")
: 匹配A后面跟着的一个P,之间不能有其他元素
-
- 兄弟选择器
-
$("A~P")
: 匹配A同级后面所有的P。
-
3.属性选择器
- 属性名称选择器
-
$("A[属性名]")
:包含指定属性的选择器
-
- 属性选择器
-
$("A[属性名='值']")
:包含指定属性等于特定值的选择器。 -
$("A[属性名!='值']")
: 不包含指定属性等于特定值的选择器。 -
$("A[属性名^='值']")
: 包含指定属性以特定值开头的选择器。 -
$("A[属性名$='值']")
: 包含指定属性以特定值结尾的选择器。 -
$("A[属性名*='值']")
: 匹配给定的属性是以包含某些值的元素。
-
- 复合属性选择器
-
$("A[属性名='值'][]...")
: 包含多个属性条件的选择器
-
4.过滤选择器
一般放在其他过滤器后面,如
$("div:first")
- 首元素选择器
-
:first
: 获取选择的元素中的第一个元素 -
$('span').first()
: 这种方式也可以
-
- 尾元素选择器
-
:last
: 获取选择元素中的最后一个元素
-
- 非元素选择器
-
:not(selector)
不包括指定内容的元素,
-
$("div:not(:last)").text("我不是最后一个")
- 偶数选择器
-
:even
: 偶数,从0开始计数
-
- 奇数选择器
-
:odd
: 奇数,从0开始计数
-
- 等于索引选择器
-
:eq(index)
: 指定索引元素
-
- 大于索引选择器
-
:gt(index)
: 大于指定索引的元素
-
- 小于索引选择器
-
:lt(index)
: 小于执行索引元素
-
- 标题选择器
-
:header
: 获得标题(h1~h6)元素,固定写法
-
<h1></h1>
<h2></h2>
$(":header").text("我是一个标题")
5.表单过滤选择器
配合表单元素使用
- 可用元素选择器
-
:enabled
:获得可用元素
-
- 不可用元素选择器
-
:disabled
: 获得不可用元素
-
- 单选/复选框选中选择器
-
:checked
: 获得单选/复选框中的元素
-
- 下拉框选中选择器
-
:selected
: 获得下拉框中的元素
-
- 获取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.内容操作
-
html()
: 获取/设置元素的标签体内容-
html()
: 获取 -
html(...)
: 设置
-
-
text()
: 获取/设置元素的标签体纯文本内容-
text()
: 获取 -
text(...)
: 设置
-
-
val()
: 获取/设置元素的value属性值。-
val()
: 获取值 -
val(...)
: 设置值
-
2.属性操作
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")
- 操作元素固有的属性(w3c文档对应标签列出的属性)
-
prop()
:获取/设置元素的属性,prop()获取在匹配的元素集中的第一个元素的属性值.它是对当前匹配到的dom对象设置属性-
prop("attribute")
:获取 -
prop("attribute", "value")
:设置
-
-
removeProp("attribute"):
删除属性
-
<input id="test1" type="text">
var test1 = $("#test1").prop("value")
console.log(test1)
2.对class属性的操作
-
addClass()
: 添加class属性值,支持同时添加多个 -
removeClass()
: 删除class属性值,支持同时删除多个 -
toggleClass()
: 切换class属性-
toggleClass("one")
: 已存在one,则删除,不存在,则添加,支持同时切换多个
-
-
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属性
-
css()
- 只设置一个的简写:
css("attribute", "values")
- 多个:
css({"attr1":"value1","attr2":"value2"...})
- 只设置一个的简写:
4.获得父/子节点
-
parent()
:获取父节点 -
children("选择器")
:获取子节点
5.同辈元素选择
-
prev()
: 查找当前元素的前一个元素【同辈】 -
prevAll()
: 查找当前元素之前的所有元素【同辈】prevAll("选择器")
-
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操作
常规逻辑方式【推荐使用】
【如果添加的内容是当前页面中的某些元素节点,那么这些元素将从原位置上消失。简言之,就是一个移动操作】
-
append()
: 父元素将子元素追加到末尾-
对象1.append(对象2)
:将对象2添加到对象1元素内部,在末尾
-
-
prepend()
: 父元素将子元素追加到开头-
对象1.prepend(对象2)
:将对象2添加到对象1内部,在开头
-
-
after()
: 添加元素到元素后边-
对象1.after(对象2)
: 将对象2添加到对象1后面,兄弟关系
-
-
before()
: 添加元素到元素前面-
对象1.before(对象2)
: 将对象2添加对象1前面,兄弟关系
-
-
clone()
: 复制操作-
clone()
: 克隆匹配的DOM元素并且选中这些克隆的副本。 -
clone(true)
: 元素以及其所有的事件处理并且选中这些克隆的副本(简言之,副本具有与真身一样的事件处理能力)
-
replaceWith()
: 替换
$('被替换的选择器').replaceWith('<button>替换成按钮</button>');
$('<a href="#">替换的超链接</a>').replaceAll('被替换的选择器');
-
remove()
: 移除元素-
对象.remove()
: 将对象删除掉
-
-
empty()
: 清空元素的所有后代元素-
对象.empty()
: 将对象的后代元素全部清空,但是保留当前对象以及其属性节点【内容全没了】
-
detach()
移除匹配的节点元素 删除节点后返回节点数组 事件会保留
var $btn = $('button').detach();
$('ul').append($btn);
变态方式(始终不明白下面这4个存在的意义?)
-
appendTo()
:-
对象1.appendTo(对象2)
:将对象1添加到对象2内部,在末尾
-
-
prependTo()
-
对象1.prepend(对象2)
:将对象1添加到对象2内部,在开头
-
-
insertAfter()
-
对象1.insertAfter(对象2)
:将对象1添加到对象2后面,兄弟关系
-
-
insertBefore()
-
对象1.insertBefore(对象2)
: 将对象1添加到对象2前面,兄弟关系
-
五、jquery的位置属性
- position 获取匹配元素相对于父元素的偏移
$('选择器').position().left
- scrollTop/scrollLeft获取匹配元素相对于滚动条卷起的位置信息(就是滚过的区域)
scroll实时监听功能
$(document).scroll(function() {
$(document).scrollLeft();
$(document).scrollTop();
})
- offset 获取匹配元素在当前视口的相对偏移 相对于浏览器左上角
$("选择器").offset();
$("选择器").offset().left;
$("选择器").offset().top;
$("选择器").offset().left;
- 获取/设置元素的宽高
var w = $('选择器').width();
var h = $('选择器').height();
$(('选择器').width(400);
- 获取innerWidth=
width + (2 * padding)
不包括边框 获取匹配元素的内部宽度
$('选择器').innerWidth()
6.获取outerWidth=width + 2 * (padding + border)
获取匹配元素的外部宽度
$('选择器').outerWidth()