老师有问题

老师有问题

<!DOCTYPE html>
<html>
<head>
 <meta charset="utf-8">
 <title>指定匹配位置</title>
</head>
<body> <p class="odd odd1">1</p>
 <p class="even">2</p>
 <p class="odd">3</p>
 <p class="even">4</p> <script type="text/javascript">

var oddP = getByClassName('odd');

  var evenP = getByClassName('even');
  for(var i = 0; i < oddP.length; i++){
   oddP[i].style.backgroundColor = 'red';
  }
  for(var i = 0; i < evenP.length; i++){
   evenP[i].style.backgroundColor = 'yellow';
  }

  function getByClassName(className,parentNode){
   if(!document.getElementsByClassName){
    return document.getElementsByClassName(className);
   }else{console.log(1);
    parentNode = parentNode || document;
    var nodeList = [];
    // 获取所有元素
    var allNodes = parentNode.getElementsByTagName('*'); 

    for (var i = 0; i < allNodes.length; i++) {
     if (className.indexOf(allNodes[i].className) != -1) {
      nodeList.push(allNodes[i]);
     }
    }

    return nodeList;
   }
  }
 </script>
</body>
</html>

className.indexOf(allNodes[i].className) != -1

我这样改为什么不可以呢

http://img1.sycdn.imooc.com//climg/5d7cc4b20917b66713660768.jpg

正在回答 回答被采纳积分+1

登陆购买课程后可参与讨论,去登陆

2回答
卡布琦诺 2019-09-16 17:14:09

假如(allNodes[i].className === className)传入的是第一个元素,减1之后,浏览器渲染的结果是0,0是偶数,就会作用到body元素上,所以body元素的背景色就变成黄色了

http://img1.sycdn.imooc.com//climg/5d7f514c095f0ed014260802.jpg

验证结果如下:

http://img1.sycdn.imooc.com//climg/5d7f518109f041a200000000.jpg


希望可以帮到你!

卡布琦诺 2019-09-14 19:13:26

改成className.indexOf(allNodes[i].className) != -1也是可以的,不能实现效果的原因如下:

http://img1.sycdn.imooc.com//climg/5d7ccb2d0935d78d07850792.jpg

希望可以帮到你!

  • 提问者 原来是晓琪_ #1
    我就是人为让它走else这个分支。在else情况下 为什么className.indexOf(allNodes[i].className)!=-1为什么不成立。如上面的图所示
    2019-09-16 15:48:31
问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星
2.组件化网页开发
  • 参与学习           人
  • 提交作业       1121    份
  • 解答问题       14456    个

本阶段在运用JS实现动态网页开发的基础上,带你深入理解企业开发核心思想,完成一个企业级网页的开发,体验前端工程师的成就感。

了解课程
请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师