JQuery 干货篇之挑选元素
试验的HTML+CSS的代码
html
<!DOCTYPE html>
<html>
<head>
<title>Example</title>
<script src="jquery-3.2.1.min.js" type="text/javascript"></script>
<link rel="stylesheet" type="text/css" href="main.css"/>
<script src="main.js" type="text/javascript"></script>
</head>
<body>
<h1>Jacqui's Flower Shop</h1>
<form method="post">
<div id="oblock">
<div class="dtable">
<div id="row1" class="drow">
<div class="dcell">
<img src="astor.png"/><label for="astor">Astor:</label>
<input name="astor" value="0" required>
</div>
<div class="dcell">
<img src="daffodil.png"/><label for="daffodil">Daffodil:</label>
<input name="daffodil" value="0" required>
</div>
<div class="dcell">
<img src="rose.png"/><label for="rose">Rose:</label>
<input name="rose" value="0" required>
</div>
</div>
<div id="row2" class="drow">
<div class="dcell">
<img src="peony.png"/><label for="peony">Peony:</label>
<input name="peony" value="0" required>
</div>
<div class="dcell">
<img src="primula.png"/><label for="primula">Primula:</label>
<input name="primula" value="0" required>
</div>
<div class="dcell">
<img src="snowdrop.png"/><label for="snowdrop">Snowdrop:</label>
<input name="snowdrop" value="0" required>
</div>
</div>
</div>
</div>
<div id="buttonDiv">
<button type="submit">Place Order</button>
</div>
</form>
</body>
</html>
css
h1 {
min-width: 70px;
border: thick double black;
margin-left: auto;
margin-right: auto;
text-align: center;
font-size: x-large;
padding: .5em;
color: darkgreen;
background-image: url("border.png");
background-size: contain;
margin-top: 0;
}
.dtable {
display: table;
}
.drow {
display: table-row;
}
.dcell {
display: table-cell;
padding: 10px;
}
.dcell > * {
vertical-align: middle
}
input {
width: 2em;
text-align: right;
border: thin solid black;
padding: 2px;
}
label {
width: 5em;
padding-left: .5em;
display: inline-block;
}
#buttonDiv {
text-align: center;
}
#oblock {
display: block;
margin-left: auto;
margin-right: auto;
min-width: 700px;
}
.hover{
background: blue;
color: white;
height:300px;
width:300px;
}
挑选器
:animated
:挑选正在处置惩罚动画的元素
:first
:挑选第一个元素
:last
:挑选末了一个元素
:eq(n)
:挑选第n个元素(从0最先)
:even
:挑选序号为偶数的元素
:odd
:挑选序号为奇数的元素
:gt(n)
:挑选序号大于n的元素
:lt(n)
:挑选序号小于n的元素
:text
:挑选一切的文本输入框
:contains(text)
:挑选包含指定文本的元素
file
:挑选一切文件上传输入框
:button
:挑选一切的按钮
:checkbox
:挑选一切的复选框
:hidden
:挑选隐蔽的元素
实例
$("img:odd").css("border","thick double red");
挑选序号为奇数的img
元素$("img:first").css("border","thick double red")
挑选第一个img
元素
JQuery对象的要领
context
挑选元素时运用的上下文对象
$("img:odd").context.TagName;
each(function())
在每一个选中的元素上运转给定的函数$("img").each(function(index,elem){ console.log(ele.TagName+" "+elem.id);//这里的index示意每一个元素的索引,elem示意每一个元素的htmlElement对象,并非jquery对象 })
index(jquery) || index(selector) 返回给定jquery对象在住对象中的序号,或许返回给定挑选器参数的索引
$("img").index("img[src=*astor]")
length || size() 返回的时jquery对象个数
$("img:odd").length
toArray() 返回一个有jquery对象中包含的htmlEelments数组
var content=$("img:odd").toArray()
这里content返回的htmlElements数组
把jquery当做数组
var content=$("img:odd");
for(var i=0;i<content.length;i++)
{
console.log(content[i].TagName+" "+content[i].src); //这里的content[i]就是htmlElement数组了,$(content[i])就变成了Jquery对象了
}
add
add
函数许可我们增加更多的项,经常使用的有add(htmlElement[])
,add(selector)
,add(jquery)
实例:
$("img:odd").add("img:even").css("border",'thick double red');
var jq=$("img[src*=astor]");
$("img:even").add(jq).add("img:even").css("border",'thick double red');
var label=document.getElementsByTagName("label");
$("img:odd").add(label).css("border","thick double red");
slice()
用来猎取特定的一组子元素
实例:
$("img").slice(0,3).css("border","thick double red"); //猎取0-2的元素
$("img").slice(3).css("border","thick double red"); //猎取3-完毕
filter
filter可以将不满足指定前提的元素剔除,经常使用的要领有
filter(jquery)
,filter(htmlElement)
,filter(function(index))
,filter(selector)
实例
//这里填入的参数selector
$("label").filter("[for*=p]").css("background-color",'blue').css("font-size",'20px').css("border","2px solid red");
$("img").filter(function (index) { //index是每一个元素的索引,假如返回的是true就会选定,false就会剔除这个元素
if(index==4)
{
return true;
}
else return false;
}).css("border",'thick double red');
var elem=document.getElementsByTagName("label")[1]; //只挑选第二个label
$("label").filter(elem).css("font-size",'30px') //这里填入的参数是htmlElement对象
not
not
要领是filter
要领的补充,主如果删除婚配前提的元素,而filter
则是保存满足婚配前提的元素,经常使用的要领有not(selector)
,not(htmlElement)
,not(jquery)
,not(function(index))
实例:
$("label").not("[for*=p]").css("background-color",'red'); //挑选for不带p的label元素
$("label").not(function (index) { //哪一个元素返回true就删除,false保存
if(index==0)
return true; //这里就会删除第一个label元素,保存背面的元素
else
return false;
}).css("background-color","yellow");
has
挑选具有指定子女的挑选器
实例:
$("div.dcell").has("img[src*=astor]").css("border","thick double red"); //挑选子代具有img属性src带有astor的div.dcell元素
var s=$("[for*=astor]");
$("div.dcell").has(s).css("border","thick double red"); //参数为jquery对象
map
以一个函数为参数,map要领可以协助我们天真的处置惩罚一个
jquery
对象,从而获得满足需要的一个jquery
对象。针对源jquery
对象中的每一个元素都挪用一次这个函数,而函数返回的HtmlElement
对象将会变成一个jquery
对象,参数是function(index,elem)
,个中`index是序号,elem是jquery对象中的每一个HTMLElelments对象,这里必需要有返回值,不然没有意义实例:
$("div.dcell").map(function(index,elem){
return elem.getElementsByTagName("img")[0]; //这里的elem是$(div.dcell)中的每一个HtmlElement对象,返回的是img元素
}).css("border",'thick double red'); //可以很清晰的看到这里返回的htmlElement对象变成了Jquery对象,由于挪用了函数css
$("img").map(function(index,elem){
if(index==1)
return elem; //返回的是第二个img的HtmlElement对象,然则经由map的包装就会变成jquery对象
}).css("border",'thick double red'); //可以很清晰的看到这里返回的htmlElement对象变成了Jquery对象,由于挪用了函数css
is
is
要领肯定jquery
对象中的某个或许某些元素是不是满足测试前提,个中的情势有is(selector)
,is(HtmlElement)
,is(jquery)
,is(function(index))
假如效果集合至少有一个元素婚配指定的前提,那末就返回true
,不然false
实例:
console.log($("img").is("[src*=astor]"));//这里是推断img中的src属性有无astor字段的,假如存在返回true
$("img").is(function(index){
})
var c=$("img").is(function (index) { //函数中假如至少有一个返回true,那末就会返回true,index是索引
return this.getAttribute('src')=='rose.png'; //推断属性
});
console.log(c);
end
当我们挪用要领链来修正效果集的时刻,
jquery
维护者一个汗青效果集的查找,我们可以运用end
回退到汗青的效果集合,end
用来抛弃当前的效果集,返回到上一层效果集实例:
$("img").filter("[src*=astor]").end().css("border",'thick double red'); //这里回退到$("img")这个效果集合
$("div.dcell").find("img").filter(":odd").filter(":eq(0)").end().end().css("border",'thick double red'); //这里挪用了两个end将效果集回退到$("div.dcell").find("img")中
addBack
获得当前效果集和上一个效果集的合集
实例
$("div.dcell").children("img").addBack().css("border",'thick double red');//这里获得的是$("div.dcell")和$("div.dcell").children("img")的合集,而且运用css
$("img").slice(0,3).filter("[src*=astor]").addBack().css("border",'thick double red');//$("img").slice(0,3)和$("img").slice(0,3).filter("[src*=astor]")的合集
//这里的挑选器参数过滤的是原效果集,相当于$("img").slice(0,3).filter("[src*=daff]"),
$("img").slice(0,3).filter("[src*=astor]").addBack("[src*=daff]").css("border",'thick double red');
children
children
是用来接见子元素的,情势有childern(),children(selector),个中第一个是用来获得效果集合一切的子元素,第二个是用来过滤获得的子元素,保存满足selector
的子元素实例:
$("div.dcell").children().css("border",'thick double red');//获得一切div.dcell的子元素,包含个中的img和input元素
$("div.dcell").children("img").css("border",'thick double red');//获得一切子元素中的img元素
find
find
是用来获得效果集合的一切的子女元素,这里是子女元素,并非只要子元素,还包含孙子。。。,情势有find()
,find(selector)
,find(htmlElement)
,find(jquery)
,find(htmlElment[])
,这里会自动去掉含有反复的元素,因而可以用来过滤元素
实例
$("div.dcell").find("img"); //找到div.dcell的子女元素img
var content=document.getElementsByTagName("input");
$("div.dcell").find(content).filter(":first").css("font-size",'1.5em');//找到div.dcell子女元素中的input元素
parent
拔取效果集合的父元素,这里示意一层关联就是父元素,并非先人元素,情势有
parent()
,parent(selector)
实例:
$("img").parent(); //拔取img的父元素
$("img").parent(":first"); //拔取img父元素中的第一个元素
parents
拔取先人元素,包含父元素,情势有
parents()
,parents(selector)
实例:
$("img").parents().each(function(index,elem){ //拔取一切的先人元素
console.log(elem.TagName+" "+elem.id);
})
$("img").parents("div.dcell").css("border",'thick double red'); //挑选一切的div.dcell元素
parentsUntil
挑选先人元素,晓得找到这个当前先人元素婚配参数挑选器为止,
parentsUntil(selector)
,parentsUntil(selector,selector)
,个中带有两个参数挑选器中的第二个参数是用来挑选所获得的效果集,第一个是用来定位直到这个元素为止实例:
$("img").parentsUntil("div.drow");//找img的先人元素,直到div.drow为止,不包含div.drow
$("img").parentsUntil("div.drow",":first").css("border",'thick double red'); //这里挑选了效果集合的第一个元素运用了款式
closest
获得效果集合元素的先人元素中婚配
selector
挑选器最接近的谁人先人元素,情势为closest(selector)
,closest(selctor,context)
,closest(htmlElemtent)
,closest(jquery)
实例:
$("img").closest("div.drow").each(function (index,elem) { //挑选满足div.drow的先人元素,这里的最接近就是辈份最接近,这里的两个class=drow的div都是最接近的,由于这俩个是同级的关联
console.log(elem.tagName+" "+elem.id);
});
var jq=$("#row1,#row2,form"); //传入jquery对象
$("img").filter("[src*=astor]").closest(jq).each(function (index,elem) { //这里拔取的是最接近第一张图的先人元素,当然是<div id="row1">
console.log(elem.tagName+" "+elem.id);
})
offestParent
获得间隔近来的先人定位元素,运用
fixed
,absolute
,relative
定位的元素,情势为offestParent()
siblings
获得一切的兄弟元素,可选的
selector
用来过滤效果,情势为siblings()
,siblings(selector)
实例:
$("img").siblings().css("font-size",'1.4em');// 获得img的一切兄弟元素,这里是input
$("img").siblings(":last"); //获得img一切兄弟元素中的末了一个元素
prev
获得上一个兄弟元素,情势为
prev()
,prev(selector)
,个中的selector
是用来过滤效果的实例:
$("input").prev().css("border",'thick double red'); //这里获得input的上一个元素Label元素
prevAll
获得当前元素的一切的上面的兄弟元素,情势为
prevALl()
,prevAll(selector)
实例:
$("input").prevAll().css("border",'thick double red'); //获得input上面的一切的兄弟元素
$("input").prev("img").css("border",'thick double red'); //获得input上面的一切的img元素
prevUntil
这个和parentsUntil一样,直到婚配
selector
就完毕了,不包含实例:
$("input").prevUntil("i").css("border",'thick double red');
next
挑选当前元素下面的一个兄弟元素,和
prev
一样
nextAll
挑选当前元素下面的一切兄弟元素,和
prevAll
一样
nextUntil
和
prevUntil
一样