Heim >Web-Frontend >js-Tutorial >javascript基础之查找元素的详细介绍(访问节点)_基础知识

javascript基础之查找元素的详细介绍(访问节点)_基础知识

WBOY
WBOYOriginal
2016-05-16 17:29:561431Durchsuche

当然这些选择器都是jQuery扩展的一些方法,那么使用原生js时要怎样来查找元素呢?今天就来简单梳理下。

DOM定义了多种查找元素的方法,除了我们常用的getElementById(),还有getElementsByTagName()和getElementsByName()。使用这几种方法方法我们可以查找html文档中的任意html元素。

getElementById()
首先来看下getElementById(),这个方法很简单,只需在参数中传入html标签的id属性值即可,由于html页面中的id具有唯一性,因此该方法返回的是单个元素对象。例如:

复制代码 代码如下:

span标签
 <script><BR> var oSpan = document.getElementById('span1'); //查找span元素<BR> alert(oSpan.innerHTML); //弹出span标签中的内容<BR> </script>

getElementsByTagName()
getElementsByTagName()参数需传入的是一个html标签名,它返回的是html文档中所有与之匹配的元素列表,这个列表具有部分数组的特性,因此也称其为类数组。当我们想操作某个特定的元素时,我们可以使用数组索引或item()来实现,例如:
复制代码 代码如下:

<script><BR> var oDiv = document.getElementsByTagName('div'); //查找所有div元素,返回一个元素列表<BR> /* 操作特定元素 */<BR> alert(oDiv[0].innerHTML) //弹出第一个div中的内容<BR> alert(oDiv.item(1).innerHTML) //弹出第二个div中的内容<BR> </script>

当然我们还可以通过length属性来循环遍历节点:
复制代码 代码如下:

<script><BR> var oDiv = document.getElementsByTagName('div'); <BR> for(var i = 0; i < oDiv.length; i++){<BR> //do something<BR> }<BR> </script>

getElementsByName()
getElementsByName()常用来查找表单元素,参数中传入html标签的name属性值,由于文档中多个html标签的name值可能相同(如单选按钮),因此该方法返回的也是一个元素列表。具体操作方法与getElementsByTagName()类似,这里不在赘述。
复制代码 代码如下:

<script><BR> var oIpt= document.getElementsByName('city'); //查找name值为city的元素 <BR> alert(oIpt[0].value);<BR> alert(oIpt.item(1).value);<BR> </script>

getByClass()
虽然使用上面的几种方法已经可以满足常见需求,但是为了更方便的访问元素节点,我们一般会自己封装一个通过class来查找元素的方法:
复制代码 代码如下:

<script><BR> /** getByClass **/<BR> function getByClass(oParent, sClass){<BR> var aEle = oParent.getElementsByTagName('*');<BR> var re = new RegExp('\\b' + sClass + '\\b');<BR> var aResult = [];<BR> for(var i = 0; i < aEle.length; i++){<BR> if(re.test(aEle[i].className)){<BR> aResult.push(aEle[i]);<BR> }<BR> }<BR> return aResult;<BR> }<BR> </script>

getByClass需传入两个参数,其中oParent为参考节点,即在oParent节点中查找元素,sClass为要查找的元素class的值。通过循环将oParent内的html标签的class值与传入的sClass值一一对比,符合条件的会存入到数组aResult中,最后再返回这个数组。

另外这里之所以用正则来匹配而没有直接用aEle[i].className == sClass,是避免标签的class值为多个时,出现匹配失效的情况。
Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn