博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
第2章 jQuery的选择器
阅读量:5128 次
发布时间:2019-06-13

本文共 8853 字,大约阅读时间需要 29 分钟。

选择器是jQuery的根基

一. 认识

1.CSS常用的选择器

标签选择器,后代选择器,Id选择器,通配符选择器,类选择器,群组选择器——主流浏览器全部支持

伪类选择器,子选择器,临近选择器等等——不是全部被支持

2.jQuery选择器

比如有个

<p class="demo">demo</p>

CSS写法是.demo

jq写法是$('.demo')

二者写法相似,但是前者添加的是样式,后者是行为。

二. 优势

写法当然简洁多了,还支持CSS1-CSS3。而且在使用一个可能不存在的元素时,自动帮你判断,存在的话执行,不存在则不执行。

那么问题来了:jq函数获取的永远是一个对象——所以不要使用如下代码

1
2
3
if
($(
'oCr'
)){
    
do
 something
}

要么转化为DOM对象再来判断,或者:

1
2
3
if
($(
'#oCr'
).length>0){
    
dosomething
}

三.选择器

做几个js原生代码练习。

【例2.1】表单隔行变色

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
<
table
 id="tab" border="1" width="400">
    
<
thead
>
        
<
tr
>
            
<
td
>id</
td
>
            
<
td
>姓名</
td
>
            
<
td
>操作</
td
>
        
</
tr
>
    
</
thead
>
    
<
tbody
>
        
<
tr
>
            
<
td
>1</
td
>
            
<
td
>dangjingtao</
td
>
            
<
td
></
td
>
        
</
tr
>
        
<
tr
>
            
<
td
>2</
td
>
            
<
td
>djtap</
td
>
            
<
td
></
td
>
        
</
tr
>
        
<
tr
>
            
<
td
>3</
td
>
            
<
td
>TAO</
td
>
            
<
td
></
td
>
        
</
tr
>
        
<
tr
>
            
<
td
>4</
td
>
            
<
td
>TAOt</
td
>
            
<
td
></
td
>
        
</
tr
>
        
<
tr
>
            
<
td
>5</
td
>
            
<
td
>hehe</
td
>
            
<
td
></
td
>
        
</
tr
>
    
</
tbody
>
</
table
>

js

1
2
3
4
5
6
7
8
9
10
window.onload=
function
(){
    
var
 oTab=document.getElementById('tab');
    
var
 aRows=oTab.tBodies[0].rows;
 
    
for
(i=0;i<aRows.length;i++){
        
if
(i%2==0){
            
aRows[i].style.background=
'#ccc'
;
        
}
    
}
}

jQuery改写:考虑:even选择器

1
2
3
$(document).ready(
function
(){
    
$(
'#tab tbody tr:even'
).css(
'background'
,
'#ccc'
);
});

 

【例2.2】给网页所有P元素加onclick事件

1
2
3
4
5
<
div
 id="div1">
    
<
p
>hehe</
p
>
    
<
p
>hahaha</
p
>
    
<
p
>hohoho</
p
>
</
div
>

JS

1
2
3
4
5
6
7
8
9
10
window.onload=
function
(){
    
var
 oDiv=document.getElementById('div1');
    
var
 aP=document.getElementsByTagName('p');
 
    
for
(i=0;i<aP.length;i++){
        
aP[i].onclick=
function
(){
            
alert(
this
.innerHTML);
        
}
    
}
}

改写:说白了就是一个div1内所有P元素,click(function(){})

1
2
3
4
5
$(document).ready(
function
(){
    
$(
'#div1>p'
).click(
function
(){
        
alert(
this
.innerHTML);
    
})
})

 

【例.3】对多选框操作,输出被选中的多选框的个数

1
2
3
4
<
input
 type="checkbox" value="1" name="check" checked="checked"/>
<
input
 type="checkbox" value="2" name="check"/>
<
input
 type="checkbox" value="3" name="check" checked="checked"/>
<
input
 type="button" value="你选中的个数" id="btn1" />
1
2
3
4
5
6
7
8
9
10
11
12
13
14
window.onload=
function
(){
    
var
 oBtn=document.getElementById('btn1');
 
    
oBtn.onclick=
function
(){
        
var
 aChk=document.getElementsByName('check');
        
var
 count=0;
        
for
(i=0;i<aChk.length;i++){
            
if
(aChk[i].checked){
                
count++;
            
}
        
}
        
alert(
'您选中的个数是'
+count+
'个'
);
    
}
}

改写:属性选择器

1
2
3
4
5
6
7
$(document).ready(
function
(){
    
var
 arr=$("input[name='check']:checked");
    
$(
'#btn1'
).click(
function
(){
        
alert(
'您选中的个数是'
+arr.length+
'个'
);
    
})
     
})

程序有点问题,就是不能实时反映当前的情况。

   
jq选择器简明词典
1. 基本选择器 释义 用法示例 备注
#id
.class
还可以是通配符,元素或者群组
等效于getElementById('')
等效于getElementsByClass('')
$("#myDiv");
$('.myClass');
$('*')
$('div1,div2')
也许是最好用的选择器。
2. 层次选择器 释义 用法示例 备注
ancestor descendant
parent>child
在给定的祖先元素下匹配所有的后代元素
选取直接子元素
$("form input")
$('form>input')
 
one+div 选取class为one的下一个div同辈元素 $(.one+div') jQuery替代方案:

$('.one').next('div')可以替代$('.one+div')

one~siblings 选取特定id元素后面所有特定类别同辈元素 $(.one~div)

jQuery替代方案:

$(#one).nextAll('div')可以替代$('#two~div')。

3.过滤选择器 释义 用法示例 备注
3.1 基本过滤选择器 释义 用法示例 备注
:first和:last 获取指定类型匹配的第一个/最后一个元素 $('div:first')
找出第一个div
$('div:last')
找出最后一个div
 
not(selector} 去除所有与给定选择器匹配的元素 假设两个选择框,一个选中一个没选中:选择的是没被点选的那个复选框。
$('input:not(:checked)')
 
:even(偶数)
:odd(奇数)
选取索引值为偶数/奇数的元素,从0开始。
注意索引值第0个即现实中第1个。
$('div:even')
选取的是偶数个索引值的div,也就是现实中第1,3,5,7..的div
索引值都是从0开始的。除了Eq是单个元素,其它都是多个元素
:eq(index)
:gt(index)
:lt(index)
提取索引值/索引值之后/索引值之前的元素 $('input:eq(1)')
索引值第1个也就是现实中第2个input标记。
:header 选择所有标题元素(h1,h2,h3....h6),前面不用跟对象 $(':header')  
:animated 选取当前执行动画的元素 $('div:animate')
选取正在执行动画的div
 
:focus 选取当前获取焦点的元素, 前面不用跟对象 $(':focus')  
3.2 内容过滤选择器 释义 用法示例 备注
:contains(text) 选取所有文本内容为text的元素 $('div:contains('我'))
选取所有内容包含“我"的div元素
 
:empty
:parent
选取不包含子元素或文本的空元素
选取含有子元素或文本的元素(也就是非空元素)
$('div:empty')
选取所有的空div
选取所有非空的div
$('div:parent')
 
:has(selector) 选取含有选择器所匹配的元素 $('div:has(p)')
选取所有含有p元素的div
 
3.3可见性过滤选择器 释义 用法示例 备注
:hidden
:visible
选取所有不可见的元素 $('div:hidden')
选取所有可见的div
如果前面不跟对象,则默认所有不可见的被选取
选取所有可见的元素 选取所有不可见的div
$('div:visible')
 
3.4 属性过滤选择器 释义 用法 备注
[attribute] 选取所有拥有此属性的d元素 $('div[id]')
选取含有id的div
 
[attribute=value]
[attribute!=value]
选取此属性为value的元素 $('div[title=haha]')
选取title为haha的div
 
选取属性值不为value的元素 $(div['title!=haha]')
选取title为haha的div
 
[attribute^=value] 选取属性以value开始的元素    
[attribute$=value]   选取属性以value结束的元素    
[attribute*=value]   选取属性含有value的元素    
[attribute|=value] 选取属性为给定字符串,或以该字符串为前缀(前缀-后缀)的元素    
[attribute-=value] 选取属性用空格分隔的值中包含value的元素    
[attribute1][attribute2]..[attributeN] 多个属性选择器的交集    
3.5 子元素过滤选择器 释义 用法 备注
:nth-dhild(index/even/odd/eqation) 选取每个父元素下第index个子元素或奇偶数子元素   index从1算起,是个集合元素
:first-child 每个父元素下第一个子元素 $('ul li:firsrt-child')
选取每个ul的第一个li元素
不同于:first,这是个集合元素
:last-child 每个父元素下最后一个子元素    
:only-child 独生子元素会被匹配,否则无效。   都是集合元素
3.6 表单对象的属性过滤选择器 释义 用法 备注
:enable
:disable
选取所有可用元素 $('form1:enable')
选取id为form1的表单内所有可用元素
 
选取所有不可用元素    
:checked (单选框,复选框)所有被选中的元素 $('input:checked')  
:selected (下拉列表)所有被选中的元素 $('select option:selected')  
4. 表单选择器 释义 用法 备注
:input 选取所有,input、textarea,select,button元素   前面不用跟对象
:text 选取所有单行文本框    
:password 选取所有密码框    
:radio 选取所有单选框    
:checkbox 选取所有复选框    
:submit 选取所有提交按钮    
:image 选取所有图像按钮    
:reset 选取所有重置按钮    
:button 选取所有button按钮    
:fil      
       

 

注意事项:

(1)当选择器含有特殊字符(比如16进制颜色代码)

\\#666

(2)注意:xxx的空格问题,意义和表现都是不同的。

 

【久违的案例】某购物网站品牌列表效果

项目需求:点击显示更多,弹出隐藏的选项,同时将重要推荐高亮显示,同时按钮文字变成:收起。再次单击收起,变回原来的页面。可以先写出JavaScript的工作方式。

先布局

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<
div
 id="section">
    
<
h2
>jQuery选择器辞典</
h2
>
    
<
ul
>
        
<
li
 class="main"><a href="javascript:;">基本选择器</a></li>
        
<
li
 class="main"><a href="javascript:;">层次选择器</a></li>
        
<
li
 class="main"><a href="javascript:;">过滤选择器</a></li>
        
<
li
 class="main"><a href="javascript:;">表单选择器</a></li>
        
<
li
 class="minor"><a href="javascript:;">基本过滤选择器</a></li>
        
<
li
 class="minor"><a href="javascript:;">内容过滤选择器</a></li>
        
<
li
 class="minor"><a href="javascript:;">属性过滤选择器</a></li>
        
<
li
 class="minor"><a href="javascript:;">子元素过滤选择器</a></li>
        
<
li
 class="minor"><a href="javascript:;">表单对象的过滤属性选择器</a></li>
        
<
li
><
a
 href="javascript:;">补白</a></li>
    
</
ul
>
    
<
div
 id="showhide">
        
显示所有
    
</
div
>
</
div
>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
*{
    
margin
:
0
;
padding
:
0
;
}
ul li{
list-style
: 
none
;}
a{
text-decoration
: 
none
;}
 
 
#section{
    
width
:
800px
;
    
margin
:
100px
 auto;
}
h
2
{
    
width
: 
400px
;
    
text-align
: 
center
;
    
margin
: 
0
 auto;
    
margin-bottom
: 
50px
;
}
 
ul li{
     
    
float
: 
left
;
}
.minor{
    
display
: 
none
;
}
ul li a{
    
display
: 
block
;
    
width
: 
200px
;
    
line-height
: 
40px
;
    
font-size
: 
16px
;
    
text-align
: 
center
;
    
color
: 
black
;
}
ul li a:hover{
    
color
: 
rgb
(
255
,
85
,
0
);
    
text-decoration
: 
underline
;
}
 
#showhide{
    
clear
:
both
;
    
width
:
80px
;
    
border
: 
1px
 solid black;
    
background
: 
url
(../images/down.gif) 
no-repeat
 4px center;
    
margin
:
0
 auto;
    
padding-left
: 
20px
;
    
cursor
: 
pointer
;
}

js:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
window.onload=
function
(){
    
var
 oBtn=document.getElementById('showhide');
    
var
 aMinor=document.getElementsByClassName('minor');
    
var
 aMain=document.getElementsByClassName('main');
    
var
 bShow=false;
    
var
 i=0;
 
 
    
oBtn.onclick=
function
(){
        
bShow=!bShow;
        
if
(bShow){
            
for
(i=0;i<aMinor.length;i++){
                
aMinor[i].style.display=
'block'
;
            
}
            
for
(i=0;i<aMain.length;i++){
                
aMain[i].getElementsByTagName(
'a'
)[0].style.color=
'#FF5500'
;
            
}
            
oBtn.style.background=
'url(images/up.gif) no-repeat 4px center'
 
        
}
else
{
            
for
(i=0;i<aMinor.length;i++){
                
aMinor[i].style.display=
'none'
;
            
}
            
for
(i=0;i<aMain.length;i++){
                
aMain[i].getElementsByTagName(
'a'
)[0].style.color=
'black'
;
            
}
            
oBtn.style.background=
'url(images/down.gif) no-repeat 4px center'
                  
        
}
    
}
     
}

评述:由于原生js的局限性,需要在html中导入较多的class。而且获取a的属性也相当麻烦。

jquery:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
$(document).ready(
function
(){
    
var
 bShow=false;
    
$(
'#showhide'
).click(
function
(){
        
bShow=!bShow;
        
if
(bShow){
            
$(
'.minor'
).css(
'display'
,
'block'
);
            
$(
'.main>a'
).css(
'color'
,
'#ff5500'
);
            
$(
this
).css(
'background'
,
'url(images/up.gif) no-repeat 4px center'
);
        
}
else
{
            
$(
'.minor'
).css(
'display'
,
'none'
);
            
$(
'.main>a'
).css(
'color'
,
'#000'
);
            
$(
this
).css(
'background'
,
'url(images/down.gif) no-repeat 4px center'
);
        
}
 
    
})
})

确实简化了一些声明。但是有些多余的class其实是不必要的。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
$(document).ready(
function
(){
    
var
 $aMinor=$('ul li:gt(3):not(:last)');
    
//获取索引值大于3的品牌集合(除了最后一条)
    
$(
'#showhide'
).click(
function
(){
        
if
($aMinor.is(
":visible"
)){
            
$aMinor.hide();
//对应的方法是show,不用再写display的css()方法了。
            
$(
'.main>a'
).css(
'color'
,
'#000'
);
            
$(
this
)
                
.css(
'background'
,
'url(images/down.gif) no-repeat 4px center'
)
                
.text(
'展开'
);
//改变里面的文本
        
}
else
{
            
$aMinor.show();
            
$(
'.main>a'
).css(
'color'
,
'#ff5500'
);
            
$(
this
)
                
.css(
'background'
,
'url(images/up.gif) no-repeat 4px center'
)
                
.text(
'收起'
);
        
}
 
    
})
})

 

转载于:https://www.cnblogs.com/djtao/p/5924118.html

你可能感兴趣的文章
当前记录已被另一个用户锁定
查看>>
Bootstrap
查看>>
Node.js 连接 MySQL
查看>>
ACM-ICPC 2018 world final A题 Catch the Plane
查看>>
那些年,那些书
查看>>
面向对象六大基本原则的理解
查看>>
注解小结
查看>>
java代码编译与C/C++代码编译的区别
查看>>
Bitmap 算法
查看>>
转载 C#文件中GetCommandLineArgs()
查看>>
list control控件的一些操作
查看>>
精读《useEffect 完全指南》
查看>>
SNF快速开发平台MVC-EasyQuery-拖拽生成SQL脚本
查看>>
DrawerLayout实现双向侧滑
查看>>
CentOS下同步时间并写入CMOS
查看>>
Java基础-一个java文件多个类的问题
查看>>
Maven安装jar包到本地仓库
查看>>
前端学习总览
查看>>
HDU1228 A + B
查看>>
第一阶段冲刺个人博客10
查看>>