js 通过class获取元素实例小结

今天看百度-web前端开发工程师-笔试题,发现了一个自己长久以来忽视的问题。
曾经有同事用我写的代码去取元素,结果没取到。原因的话,我相信是因为她写的类名中有“-”,这个在正则中会被当作元字符来处理。所以代码可以像那个前端所写的那样:

 代码如下 复制代码

 var Tea = (function(){
    function getElementsByClassName(className,tag,parent){
        //".all" 是 DHTML www.111cn.net中的用法,当 tag 等于 "*" 时,
        //如果浏览器支持 ".all" 就用,否则,用标准DOM方法
        var allTags=(tag == "*" && parent.all) ? parent.all : parent.getElementsByTagName(tag);
        var matchingElements= new Array();
        //因为 '-' 是正则表达式中的元字符,而 className 中 '-' 是合法的,
        //所以,当把 className 写入正则表达式之前,要先转义 '-'
        className=className.replace(/-/g,"\-");
        var regex=new RegExp("(^|\b)"+className+"(\b|$)");
        var element;
        for(var i=0;i<allTags.length;i++){
            element=allTags[i];
            if(regex.test(element.className)){
                matchingElements.push(element);
            }
        }
        return matchingElements;
    }
    return {
        getElementsByClassName : getElementsByClassName
    };
})();

群里面的99兄,告诉小弟说,现在一般不流行这样的匹配方式了,可以采用以下方式:

 代码如下 复制代码

   (' ' +className.toLowerCase() + ' ').indexOf(' ' +要判断的class+ ' ') !== -1

例2

 代码如下 复制代码

<html>
<head>
<script type="text/javascript">
window.onload = function()
{   var topMenus = getClass('li','topMenu');
    for(var i=0;i < topMenus.length; i++)
    {
        alert(topMenus[i].innerHTML);       
    }
}
function getClass(tagName,className) //获得标签名为tagName,类名className的元素
{
    if(document.getElementsByClassName) //支持这个函数
    {        return document.getElementsByClassName(className);
    }
    else
    {       var tags=document.getElementsByTagName(tagName);//获取标签
        var tagArr=[];//用于返回类名为className的元素
        for(var i=0;i < tags.length; i++)
        {
            if(tags[i].class == className)
            {
                tagArr[tagArr.length] = tags[i];//保存满足条件的元素
            }
        }
        return tagArr;
    }
}
 
</script>
</head>
<body>
<ul id="nav">
<li class="topMenu"><a href="#">这里全部是产品介绍</a>
    <ul class="subMenu">
        <li><a href="#">这里全部是产品1</a></li>
        <li><a href="#">这里全部是产品2</a></li>
        <li><a href="#">这里全部是产品3</a></li>
        <li><a href="#">这里全部是产品4</a></li>
        <li><a href="#">这里全部是产品5</a></li>
        <li><a href="#">这里全部是产品6</a></li>
    </ul>
</li>
<li class="topMenu"><a href="#">服务介绍</a>
    <ul class="subMenu">
        <li><a href="#">服务1</a></li>
        <li><a href="#">服务2</a></li>
        <li><a href="#">服务3</a></li>
        <li><a href="#">服务4</a></li>       
    </ul>
</li>
<li class="topMenu"><a href="#">成功案例</a>
    <ul class="subMenu">
        <li><a href="#">案例1</a></li>
        <li><a href="#">案例2</a></li>
        <li><a href="#">案例3</a></li>
        <li><a href="#">案例4</a></li>
    </ul>
</li>
<li class="topMenu"><a href="#">关于我们会找你的</a>
    <ul class="subMenu">
        <li><a href="#">我们会找你的1</a></li>
        <li><a href="#">我们会找你的2</a></li>
        <li><a href="#">我们会找你的3</a></li>
        <li><a href="#">我们会找你的4</a></li>
    </ul>
</li>
<li class="topMenu"><a href="#">这里会联系我们会找你的我们会找你的</a>
    <ul class="subMenu">
        <li><a href="#">这里会联系我们会找你的1</a></li>
        <li><a href="#">这里会联系我们会找你的2</a></li>
        <li><a href="#">这里会联系我们会找你的3</a></li>
        <li><a href="#">这里会联系我们会找你的4</a></li>
        <li><a href="#">这里会联系我们会找你的5</a></li>
        <li><a href="#">这里会联系我们会找你的6</a></li>
        <li><a href="#">这里会联系我们会找你的7</a></li>
    </ul>
</li>
</ul>
</body>
</html>

时间: 2024-10-25 20:38:31

js 通过class获取元素实例小结的相关文章

ie中js getElementsByTagName无法获取元素BUG

ie中js getelementsbytagname无法获取元素bug 定义和用法 getelementsbytagname() 方法可返回带有指定标签名的对象的集合. 语法 document.getelementsbytagname(tagname)说明 getelementsbytagname() 方法返回元素的顺序是它们在文档中的顺序. 如果把特殊字符串 "*" 传递给 getelementsbytagname() 方法,它将返回文档中所有元素的列表,元素排列的顺序就是它们在文档

原生JS获取元素集合的子元素宽度实例_javascript技巧

有些时候,在一个网页的ul li中,存在左右两个部分的内容,但是右边元素内容又是不固定,左边元素相对应的不能用固定宽度,所有需要我们动态的获取右边元素宽度,来赋值给左边元素的marginRight值. HTML结构: <ul class="itemCon"> <li class="item"> <div class="leftMess"> <div class="leftCon">

js操作数组函数实例小结_javascript技巧

本文实例讲述了js操作数组函数.分享给大家供大家参考,具体如下: 1.删除数组中指定的元素 /** * 参考实例 foreach = function (obj, insp){ if(obj== null && obj.constructor != Array){ return []; } //obj是要处理的数组,obj==null 表示对象尚未存在:obj.constructor != Array 表示对象obj的属性的构造函数不是数组: //constructor属性始终指向创建当前

js获取元素外链样式的方法_javascript技巧

本文实例讲述了js获取元素外链样式的方法.分享给大家供大家参考.具体分析如下: 一般给元素设置行内样式,如<div id="div1" style="width:500px;"></div>.如要获取它的样式,即可document.getElementById("div1").style.width来获取或设置.但是如果样式是在外链link中的或者是页面的非行内样式,就获取不到了. 在标准浏览器中可以通过window.ge

用js动态添加html元素,以及属性的简单实例_javascript技巧

用js动态添加html元素,以及属性的简单实例 function test(){ //创建节点 var lswt_2=document.createElement("div"); //设置节点id lswt_2.id='lswtColse'; //设置节点属性 lswt_2.style.width='11px'; lswt_2.style.height='10px'; lswt_2.style.top='0px'; lswt_2.style.right='0px'; lswt_2.st

使用jquery/js获取iframe父子级、同级获取元素的方法_jquery

在web开发中,经常会用到iframe,难免会碰到需要在父窗口中使用iframe中的元素.或者在iframe框架中使用父窗口的元素 js 在父窗口中获取iframe中的元素 1. 格式:window.frames["iframe的name值"].document.getElementById("iframe中控件的ID").click(); 实例:window.frames["ifm"].document.getElementById("

JS封装通过className获取元素的函数示例_javascript技巧

本文实例讲述了JS封装通过className获取元素的函数.分享给大家供大家参考,具体如下: <div id="box"> <div class="star"></div> <div class="star"></div> <div class="app"></div> <p class="star"></

js动态创建div等元素实例

为了节省时间,就直接贴代码了!希望大家多多的关注我! <html> <head> <title>js动态创建div等元素实例</title> <style type="text/css"> </style> </head> <body> <script language="javascript"> var Test={ createDiv:function()

js获取元素到文档区域document的坐标方法

  获取页面中元素到文档区域document的横向.纵向坐标的两种方法及其比较 在js控制元素运动的过程中,对于页面元素坐标位置的获取是经常用到的,这里主要总结下两种方法: 一:通过叠加元素对象和它的offsetParent(如果存在)的offsetLeft/offsetTop属性来实现 在阅读javascript高级程序设计第三版DOM部分时,了解到要获取某个元素在页面上的偏移量,需要将这个元素的offsetLeft和offsetTop与其offsetParent的相同属性相加,一直循环直至根