通过class名,取得元素节点

    昨天在做一个点击展开关闭效果的时候,为了方便重用,不考虑通过id来取得元素,而是通过可重用的class来取得元素。可是底层的js并不提供这个方法。一开始看YUI的api,看到有相关的方法,叫做getAncestorByClassName(),在本地试了下,虽然比不上jq的parents()方法好用,不过,也还算可以了。很顺利地完成了我想要的效果,可是传到网上去以后,却发现不能用。因为线上的YUI库是个版本比较老的版本,我猜很可能是还不支持这个方法。没办法,今天自己封装了个函数,提供同样的功能。

=======================demo============================

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>无标题文档</title>
</head>
<script type="text/javascript">
var getAncestorByClassName = function(node,oClassName){
   var obj = typeof node == "string" ? document.getElementById(node):node;
   while(obj.parentNode!=document){
    if(obj.parentNode.className==oClassName){
     return obj.parentNode;
    }else{
     obj = obj.parentNode;
    }
   }
   return null;
}
window.onload = function(){
   var test = document.getElementById("test");
   test.onclick=function(){
    var adang = getAncestorByClassName(this,"adang");
    alert(adang.title);
   }
}
</script>
<body>
<div class="adang" title="hello" id="demo">
<ul class="adang2" title="world">
   <li>
    <p>
     <a href="#" id="test">test</a>
    </p>
   </li>
</ul>
</div>
</body>
</html>

函数getAncestorByClassName 接收两个参数,第一个为元素节点,类型为DOM节点元素或者是对象的id都可以,第二个为想要取得的父节点的class名。返回值类型是DOM节点元素,如果没有找到,则返回null。这个例子很简单,可以举一返三写出通过 class名返回子节点元素等等功能,我就不多写了。

原文地址:https://www.cnblogs.com/cly84920/p/4427115.html