发新贴  快速回复

课后练习getElementsByClassName增强不会做~

sjn221314
2014-11-13 14:36
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title> New Document </title>
<meta name="Generator" content="EditPlus">
<meta name="Author" content="">
<meta name="Keywords" content="">
<meta name="Description" content="">
<script type="text/javascript">
window.err==function(){
    var oUl=document.getElementById("ul1")
    tab(oUl,'li','box.box1')
}
function tab(obj,tagname,classname){
    var Elem=obj.getElementsByTagName(tagname);
    var arrClass=[];
    var arrName=[];
    arrClass.push(classname.split(','))
    for (var i=0;i<Elem.length;i++)
    {
        alert(Elem.className)
        
        
        
    }
    
}
</script>
</head>
<body>
<ul id="ul1">
    <li class="box box1">11111</li>
    <li class="box2">11111</li>
    <li class="box3">11111</li>
    <li class="box1">11111</li>
    <li class="box4">11111</li>
</ul>
<p class="box">111111</p>
</body>
</html>


无为
是哪节课的课后练习?你这里有两个明显的错误:

1,
 arrClass.push(classname.split(','))你传进来的参数是 box.box1 ,所以分割符应该是 . 而不是 , 。
2,

        for (var i=0;i<Elem.length;i++)
        {
                alert(Elem.className)Elem.className 这里少写了下标: Elem[i].className

2014-11-13 15:33  回复本帖
sjn221314
forum.php?mod=redirect&goto=findpost&pid=32118&ptid=10159
是哪节课的课后练习?你这里有两个明显的错误:

1,


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<title> New Document </title>
<meta name="Generator" content="EditPlus">
<meta name="Author" content="">
<meta name="Keywords" content="">
<meta name="Description" content="">
<script type="text/javascript">
window.err==function(){
    var oUl=document.getElementById("ul1")
    tab(oUl,'li','box,box1')
}
function tab(obj,tagname,classname){
    var Elem=obj.getElementsByTagName(tagname);
    var arrClass=[];
    var arr=[];
    var arr1=[];
    arrClass.push(classname.split(','))
    for (var i=0;i<Elem.length;i++)
    {
        var arrName=Elem[i].className.split(' ');
        for (var j=0;j<arrName.length;j++)
        {
            
            for (var k=0;k>arrClass.length;k++)
            {
                if(arrName[j]==arrClass[k]){
                    arr.push(Elem[i])
                }
            }
        }
    }
    return arr;
}
</script>
</head>
<body>
<ul id="ul1">
    <li class="box box1">11111</li>
    <li class="box2">11111</li>
    <li class="box3">11111</li>
    <li class="box1">11111</li>
    <li class="box4">11111</li>
</ul>
<p class="box">111111</p>
</body>
</html>


2014-11-13 15:41  回复本帖
sjn221314
forum.php?mod=redirect&goto=findpost&pid=32118&ptid=10159
是哪节课的课后练习?你这里有两个明显的错误:

1,


我现在2个数字都弄出来了。但是arrName[j]==arrClass[k]不知道咋判断。感觉不对劲~
2014-11-13 15:42  回复本帖
无为
forum.php?mod=redirect&goto=findpost&pid=32124&ptid=10159
我现在2个数字都弄出来了。但是arrName[j]==arrClass[k]不知道咋判断。感觉不对劲~ ...

实在不明白你 i 循环的里面为什么还要再写两个嵌套循环,关于这个className 函数封装,视频的dom中级中有讲。
2014-11-13 16:18  回复本帖
sjn221314
forum.php?mod=redirect&goto=findpost&pid=32128&ptid=10159
实在不明白你 i 循环的里面为什么还要再写两个嵌套循环,关于这个className 函数封装,视频的dom中级中有 ...

传入的classname有多个,是不是要有一次循环?
然后li上可能有多个classname,是不是又要作一次循环?
2014-11-13 16:25  回复本帖
无为
forum.php?mod=redirect&goto=findpost&pid=32129&ptid=10159
传入的classname有多个,是不是要有一次循环?
然后li上可能有多个classname,是不是又要作一次循环?
 ...

额,你这里依然有两个问题:
1,arrClass.push(classname.split(','))  这里存入数组的并非是你想像的那样,比如你传入的是  'box,box1', arrClass数组中存的并不是 ['box','box1'], 而是  [['box',box1]] ,因为 split() 方法本身返回的就是一个数组,你这里是把一个数组存入了另一个数组中。 直接让 arrClass = classname.split(',') 就可以了,不需要用 push() 方法。


2,for (var k=0;k>arrClass.length;k++)   这里声明的时候 k 的初始值是 0 ,而判断条件中是 k>arrClass.length 这条件显然并不能成立,循环直接无法继续执行了,换成 k<arrClass.length 才对,应该是手误了吧?
2014-11-13 16:38  回复本帖
sjn221314
forum.php?mod=redirect&goto=findpost&pid=32134&ptid=10159
额,你这里依然有两个问题:
1,arrClass.push(classname.split(','))  这里存入数组的并非是你想像的那 ...

嗯嗯~谢谢老师,我对split的理解以为只是拆出来而已。没想到是自动返回一个数组了。我在去研究下。非常感谢老师
2014-11-13 16:41  回复本帖
 
ヽ雨为我停°
可以参考我这个代码,也希望多多指教其中的问题,谢谢。
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>无标题文档</title>
<script>
    //匹配数组中的数据
    function  arrIndexOf( arr,v){
        for(var i=0;i<arr.length;i++){
            if( arr[i] == v){
                return i;    
            }    
        }
        return -1;
    }
        
    window.err= = function(){
        var oUl = document.getElementById('ul1');
        var oP = document.getElementById('p1');
        
        oP.err= = function(){
            getEle(oUl,'li','box,box1');
        }
        
        
        function getEle(obj,tagname,aClass){
            var tag = obj.getElementsByTagName(tagname);
            var oClass = aClass.split(",");
            

            for(var j=0;j<oClass.length;j++){
                var arr1 = [];
                for( var i=0;i<tag.length;i++){
                        var arrClassName = tag[i].className.split(' ');
                        var _index = arrIndexOf(arrClassName,oClass[j]);
                        if(_index != -1){
                            tag[i].style.background = 'red';
                        }
                        
                }
            }
        }    
        
    }                                                                                                                                                                                        
</script>
</head>

<body>
    <ul id="ul1">
        <li class="box3 box">1111</li>
        <li class="box1">1221</li>
        <li>33112</li>
        <li class="box3">4444</li>
    </ul>
    <p class="box" id="p1">呵呵</p>
</body>
</html>


2014-11-14 15:54  回复本帖
sjn221314
forum.php?mod=redirect&goto=findpost&pid=32178&ptid=10159
可以参考我这个代码,也希望多多指教其中的问题,谢谢。

嗯嗯~好的,谢谢{:soso_e100:}
2014-11-14 15:58  回复本帖
登录 后才可以发表回复