js中的擷取元素的方式
- 通過getElementById的形式擷取
- 通過getElementsByClassName形式擷取元素
- 通過getElementsByTagName标簽選擇元素
- 靜态擷取和動态擷取過程
- 通過選擇器來擷取元素
- js相關的命名規範
提示
部落客:章飛_906285288
部落格位址:http://blog.csdn.net/qq_29924041
通過getElementById的形式擷取
getElementById這個就不用多說了,最開始使用的就是這個,也就是需要給标簽一個id,然後通過标簽選擇到對應的對象。因為id是唯一的,是以也擷取的這個變量其實也是唯一的
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<meta charset="UTF-8"><!--申明目前網頁的編碼集UTF-8-->
<meta name="Generator" content="EditPlus®"> <!--編輯器的名稱-->
<meta name="Author" content="作者是誰">
<meta name="Keywords" content="關鍵詞">
<meta name="Description" content="描述和簡介">
<style type="text/css">
body,dl,dd,dt,p,h1,h2,h3,h4,h5,h6{ margin: ;}
ul,ol{margin: ; list-style: none; padding: ;}
a{ text-decoration: none; }
*{ margin: ; padding: ; }
.main{width: px;margin: px auto;box-shadow: px deeppink}
p{width: px ;height: px;background: blue;}
</style>
</head>
<body>
<div class="main">
<p id="id_p">p</p>
</div>
<script>
var id_p = document.getElementById("id_p");
id_p.onclick = function () {
this.style.backgroundColor = "red";
}
</script>
</body>
</html>
最簡單的效果
過getElementsByClassName形式擷取元素
既然有getElementsById那麼與之對應的肯定也有根據className來擷取的變量名,那就是cgetElementsById,可能會有點奇怪,就是id是唯一的,但是很多時候,我們的className并不是唯一的啊。那麼對應擷取到的應該也不是唯一的。是的,通過getElementsByClassName擷取到的是一個對象數組,是一個數組,并不是一個唯一的值
var abox = document.getElementsByClassName("box");
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<meta charset="UTF-8"><!--申明目前網頁的編碼集UTF-8-->
<meta name="Generator" content="EditPlus®"> <!--編輯器的名稱-->
<meta name="Author" content="作者是誰">
<meta name="Keywords" content="關鍵詞">
<meta name="Description" content="描述和簡介">
<style type="text/css">
body,dl,dd,dt,p,h1,h2,h3,h4,h5,h6{ margin: ;}
ul,ol{margin: ; list-style: none; padding: ;}
a{ text-decoration: none; }
*{ margin: ; padding: ; }
.main{width: px;box-shadow: px deeppink;margin: px auto}
p{margin: px auto;width: px;height: px;background: greenyellow }
</style>
</head>
<body>
<div class="main">
<p class="class_p">1</p>
<p class="class_p">2</p>
<p class="class_p">3</p>
</div>
<script>
var classes_p = document.getElementsByClassName("class_p");
console.log(classes_p.length);
classes_p[].onclick = function () {
this.style.color ="red";
}
classes_p[].onclick = function () {
this.style.backgroundColor ="blue";
}
classes_p[].onclick = function () {
this.innerText = "換個内容試試";
}
</script>
</body>
</html>
注意:相容:不相容IE8以及以下
通過getElementsByTagName标簽選擇元素
與選擇器一樣,選擇器可以使用标簽選擇器,那麼在js中也是可以通過标簽來選擇到對應的标簽的,它的使用跟getElementsByClassName一樣,擷取到的是一組數組。
var a_p = document.getElementsByTagName("p");
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<meta charset="UTF-8"><!--申明目前網頁的編碼集UTF-8-->
<meta name="Generator" content="EditPlus®"> <!--編輯器的名稱-->
<meta name="Author" content="作者是誰">
<meta name="Keywords" content="關鍵詞">
<meta name="Description" content="描述和簡介">
<style type="text/css">
body,dl,dd,dt,p,h1,h2,h3,h4,h5,h6{ margin: ;}
ul,ol{margin: ; list-style: none; padding: ;}
a{ text-decoration: none; }
*{ margin: ; padding: ; }
.main{width: px;box-shadow: px deeppink;margin: px auto}
p{margin: px auto;width: px;height: px;background: greenyellow }
</style>
</head>
<body>
<div class="main">
<p >1</p>
<p >2</p>
<p >3</p>
</div>
<script>
<!--直接通過getElementsByTag來擷取标簽名字-->
var classes_p = document.getElementsByTagName("p");
console.log(classes_p.length);
classes_p[].onclick = function () {
this.style.color ="red";
}
classes_p[].onclick = function () {
this.style.backgroundColor ="blue";
}
classes_p[].onclick = function () {
this.innerText = "換個内容試試";
}
</script>
</body>
</html>
顯示效果如下所示:
注意:可以相容所有浏覽器
靜态擷取和動态擷取過程
什麼是靜态擷取過程和動态擷取過程???
靜态擷取過程也就是當我們擷取到一個節點之後,它的id改變以後不會影響到這個節點,就好比我們找到這個人,無論它改了什麼名字,或者換了什麼衣服,其實對我們所認識的這個人都沒有任何影響
如:
<p id = "static">靜态擷取過程</p>
var oStatic = document.getElementById("static");
oStatic.style.color = "red";
oStatic.style.id = "s_static";
ostatic.style.color = "blue";
當id修改了之後,其對象的認知是不會進行改變的,注意為什麼是id,因為id它具有唯一性
動态擷取過程也就是如果我們每一次去修改其className的時候,這個時候都需要重新去擷取一下這個數組,因為數組預設是會改變的。每當我們用到一次類數組的時候都會動态的擷取一次
如:
<p class='dynamic'>p1</p>
<p class='dynamic'>p2</p>
<p class='dynamic'>p3</p>
var aDynamic= document.getElementsByClassName('xiao1'); //擷取到dynamic類數組
console.log( aDynamic.length ); //先彈出長度 3
aDynamic[0].style.color = 'red'; //在給數組的第0個(p1)字型設定顔色
aDynamic[0].className = 'dynamic_2'; //然後将類數組的第一個的類名改一下,這個時候就隻剩下2個dynamic
console.log(aDynamic.length ); //彈出長度,這時候肯定長度為2了
aDynamic[0].style.color = '#cc00ff'; // 這個時候再給數組的第0個添加顔色,添加的就不再是p1了,而是p2
示範代碼:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<meta charset="UTF-8"><!--申明目前網頁的編碼集UTF-8-->
<meta name="Generator" content="EditPlus®"> <!--編輯器的名稱-->
<meta name="Author" content="作者是誰">
<meta name="Keywords" content="關鍵詞">
<meta name="Description" content="描述和簡介">
<style type="text/css">
body,dl,dd,dt,p,h1,h2,h3,h4,h5,h6{ margin: ;}
ul,ol{margin: ; list-style: none; padding: ;}
a{ text-decoration: none; }
*{ margin: ; padding: ; }
.clearfix:after{
content: "";
display: block;
clear: both;
}
.fl_l{float: left}
.fl_r{float: right}
.main{width: px;margin: px auto;box-shadow: px deeppink}
p{width: px;height: px;background: greenyellow;margin: px}
</style>
</head>
<body>
<div class="main">
<div class="static_content">
<header>static_content</header>
<p id="static_p">static</p>
</div>
<div class="dynamic_content clearfix">
<header>dynamic_content</header>
<p class="dynamic_p fl_l">dynamic_1</p>
<p class="dynamic_p fl_l">dynamic_2</p>
<p class="dynamic_p fl_l">dynamic_3</p>
</div>
</div>
<script>
//靜态的擷取方法,隻要擷取了,就不會再改變
var oStatic = document.getElementById("static_p");
oStatic.style.background = "red";
oStatic.id = "static_p_2";
oStatic.style.color = "blue"; //id改變了,但是其依舊能夠改變樣式
//動态的擷取方法,隻要每使用一次,就需要動态的擷取一次
var aDynamicP = document.getElementsByClassName("dynamic_p");
console.log(aDynamicP.length);
aDynamicP[].onclick = function () {
aDynamicP[].className = "dynamic_p_2 fl_l";
console.log(aDynamicP.length);
aDynamicP[].style.backgroundColor = "blue";
}
</script>
</body>
</html>
顯示效果如下所示:
靜态的過程就直接改變了。動态的過程在點選第一個p元素的時候,console輸出的為2,而不是原來的3,它會動态改變。這兒時候aDynamic中的第二個元素也就是對應的為dynamic3了。是以dynamic3的背景樣式發生了改變
注意:getElementById是靜态擷取的過程,getElementsByClassName與getElementsByTagName都是動态擷取的過程,但是一般很少去使用getElementsByTagName來修改。
通過選擇器來擷取元素
通過querySelector()和querySelectorAll()來進行選擇器選取元素。,但是這種是相容IE8及以上版本
querySelector是擷取單個節點,如果選擇器是類名或者标簽名等,隻會擷取到一個,(如果您在後面加上下标就會報錯,找不到這個元素)
var oBox = document.querySelector("#main.box");
oBox.style.color = "red";
querySelectorAll是擷取節點下面所有同一類的标簽元素。
var aBox = document.querySelectorAll(".content p");
console.log(aBox.length);
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<meta charset="UTF-8"><!--申明目前網頁的編碼集UTF-8-->
<meta name="Generator" content="EditPlus®"> <!--編輯器的名稱-->
<meta name="Author" content="作者是誰">
<meta name="Keywords" content="關鍵詞">
<meta name="Description" content="描述和簡介">
<style type="text/css">
body,dl,dd,dt,p,h1,h2,h3,h4,h5,h6{ margin: ;}
ul,ol{margin: ; list-style: none; padding: ;}
a{ text-decoration: none; }
*{ margin: ; padding: ; }
.clearfix:after{
content: "";
display: block;
clear: both;
}
.fl_l{float: left}
.fl_r{float: right}
.main{width: px;margin: px auto;box-shadow: px deeppink}
p{width: px;height: px;background: greenyellow;margin: px}
</style>
</head>
<body>
<div class="main">
<div class="qS">
<header>querySelector</header>
<p id="qS_p">querySelector</p>
</div>
<div class="content clearfix">
<header>querySelectorAll</header>
<p class="qSA_p fl_l">querySelectorAll</p>
<p class="qSA_p fl_l">querySelectorAll</p>
<p class="qSA_p fl_l">querySelectorAll</p>
</div>
</div>
<script>
var oP = document.querySelector(".qS #qS_p");
oP.style.color = "red";
var aP = document.querySelectorAll(".content .qSA_p");
console.log(aP.length);
aP[].style.color = "blue"
aP[].style.color = "red"
aP[].style.color = "gold"
</script>
</body>
</html>
顯示如下所示:
相對于以上所有的擷取方式,這個時候querySelector與querySelectorAll顯得更加的靈活一點。
js相關的命名規範
1.s: 表示字元串String
2.b: 表示布爾Boolean
3.a: 表示數組Array
4.o: 表示對象Object
5.fn: 表示函數Function
6.re: 表示正則Regular Expression
歡迎持續通路部落格:http://blog.csdn.net/qq_29924041
附上99乘法表代碼:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Title</title>
<meta charset="UTF-8"><!--申明目前網頁的編碼集UTF-8-->
<meta name="Generator" content="EditPlus®"> <!--編輯器的名稱-->
<meta name="Author" content="作者是誰">
<meta name="Keywords" content="關鍵詞">
<meta name="Description" content="描述和簡介">
<style type="text/css">
body,dl,dd,dt,p,h1,h2,h3,h4,h5,h6{ margin: ;}
ul,ol{margin: ; list-style: none; padding: ;}
a{ text-decoration: none; }
*{ margin: ; padding: ; }
.main{width: px;margin: px auto;box-shadow: px deeppink;text-align: center;border: px solid transparent}
.box{width: px;height: px;box-shadow: px red;margin: px auto;border: px solid transparent}
.clearfix:after{
content: '';
clear: both;
display: block;
}
.box p{
width: px;
height: px;
float: left;
border: px solid red;
margin: px;
font-size: px;
line-height: px;
padding:px px;
text-align: center;
}
</style>
</head>
<body>
<div class="main">
<div class="box clearfix">
<!--<p>1 * 1 = 1</p>-->
</div>
<div class="box clearfix"></div>
<div class="box clearfix"></div>
<div class="box clearfix"> </div>
</div>
<script>
var aBoxs = document.querySelectorAll(".box");
console.log(aBoxs.length);
// 第一個
for(var i = ;i <= ; i++){
for(var j = ;j <= i; j++){
aBoxs[].innerHTML += "<p>" + i +" * "+ j +" = "+i*j+"</p>";
}
aBoxs[].innerHTML+="<br><br><br>";
}
// 第二個
for(var i = ;i >= ; i--){
for(var j = i ;j <= ; j++){
aBoxs[].innerHTML += "<p>" + i +" * "+ j +" = "+i*j+"</p>";
}
aBoxs[].innerHTML+="<br><br><br>";
}
for(var i = ;i >= ; i--){
for(var j = ;j <= i; j++){
aBoxs[].innerHTML += "<p>" + i +" * "+ j +" = "+i*j+"</p>";
}
aBoxs[].innerHTML+="<br><br><br>";
}
//第三個
for(var i = ;i <= ; i++){
for(var j = i ;j <= ; j++){
aBoxs[].innerHTML += "<p>" + i +" * "+ j +" = "+i*j+"</p>";
}
aBoxs[].innerHTML+="<br><br><br>";
}
</script>
</body>
</html>