tagArr[tagArr.length] = tags[i] 一种非常巧妙的思路

之前我们封装getByClass方法的时候,一般有一步骤是把匹配的元素推进数组中。  

比如  aResult.push(obj[i]);

之前的方法代码:

getByClass:

 1 function $class(domclass){
 2  var obj = document.getElementsByTagName('*');   //获取页面内所有DOM元素
 3  var aResult = [];   //定义一个空数组,用来存放与目标className相同的元素
 4  for(var i=0;i<obj.length;i++){  //这个是遍历页面中所有元素然后拿他们的class进行对比。如果和我们传进来的domclass这个参数一样就把他放进数组 aResult中。
 5     if(obj[i].className == domclass){
 6     aResult.push(obj[i]);  
 7     }
 8  }
 9  return aResult;  //返回这个放进了domclass元素的数组
10 }
11 window.onload = function(){
12    alert($class('boom').length); //获取这些元素的个数
13    alert($class('boom')[0].className); //获取这些元素的第一个元素的className,其实都是一样的className.
14 }

css:

1 .boom{
2    color:red;
3 }

html:

1 <p class="boom">1</p>
2 <div>2</div>
3 <div class="boom">3</div>
4 <ul>
5  <li class="boom">4</li>
6  <li>5</li>
7 </ul>

这是之前的方法,下面我们换一种思路,利用tagArr[tagArr.length] = tags[i] 的思路来讲匹配元素放到这个数组tagArr中。

我们首先来看下这个原理是怎么样的。我写的一个小例子。

 1 <!doctype html>
 2 <html>
 3 <head>
 4 <meta charset="utf-8">
 5 <title>无标题文档</title>
 6 <style>
 7 .boom{
 8   color:red;
 9 }
10 </style>
11 <script>
12 window.onload = function(){
13    var tagArr = [];
14    alert(tagArr.length);   //第一次弹出的是0
15    tagArr[0] = 'a';  //相当于 tagArr[tagArr.length] = 'a';
16    alert(tagArr.length);   //第二次弹出的是1
17    tagArr[1] = 'b';  //相当于 tagArr[tagArr.length] = 'b';     
18    alert(tagArr.length);   //第三次弹出的是2;
19 }
20 </script>
21 </head>
22 
23 <body>
24 <div class="boom">1div</div>
25 <div>2</div>
26 <p class="boom">3</p>
27 <ul>
28  <li>4</li>
29  <li class="boom">5</li>
30 </ul>
31 <div>6</div>
32 <div class="boom">7div</div>
33 <div>8</div>
34 <div class="boom">9div</div>
35 </body>
36 </html>

从这里我们可以看出,我定义的tagArr是一个空数组,最开始,tagArr.length是0,

经过tagArr[tagArr.length] = 'a';实际上就是tagArr[0] = 'a';之后,数组tagArr中有了一个元素,那么此时tagArr.length就是1了,

然后不断向下进行。

通过下一个例子:

 1 <!doctype html>
 2 <html>
 3 <head>
 4 <meta charset="utf-8">
 5 <title>无标题文档</title>
 6 <style>
 7 .boom{
 8   color:red;
 9 }
10 </style>
11 <script>
12 function getClass(tagName,sClass){
13   var tags = document.getElementsByTagName('div');    
14   var tagArr = [];
15   for(var i=0;i<tags.length;i++){
16      if(tags[i].className == sClass){
17         tagArr[tagArr.length] = tags[i];     
18      }  
19   }
20   return tagArr;
21 }
22 window.onload = function(){
23   alert(getClass('div','boom').length);    
24 }
25 </script>
26 </head>
27 
28 <body>
29 <div class="boom">1div</div>
30 <div>2</div>
31 <p class="boom">3</p>
32 <ul>
33  <li>4</li>
34  <li class="boom">5</li>
35 </ul>
36 <div>6</div>
37 <div class="boom">7div</div>
38 <div>8</div>
39 <div class="boom">9div</div>
40 </body>
41 </html>

显示结果为3,就是class为boom的div有三个。

因此如果下次再用到getByClass的时候,我们也可以用这种思路了。

原文地址:https://www.cnblogs.com/hl-520/p/4245624.html