<!doctype html> <html> <head> <meta charset="UTF-8"> <title>Document</title> </head> <body> <ul id="list"> <li>1</li> <li>2</li> <li>3</li> <li>4</li> </ul> <p>class为on的p标签</p> </body> </html> <script type="text/javascript"> window.onload=function(e){ var len1= getByClass("on","list"); alert(len1.length); // 结果等于2为正确 var len2= getByClass("on"); alert(len2.length); // 结果等于3为正确 } function getByClass(clsName, parent){ //定义函数getByClass()实现获取document或指定父元素下所有class为on的元素 var oP = parent?document.getElementById(parent):document; var oOn = oP.getElementsByTagName("*"); var on = []; for (var i=0,len=oOn.length;i<len;i++){ if(oOn[i].className == clsName){ on.push(oOn); } } return on; } </script>
是程序后台的原因,我把程序单独放在文件里执行就没有出现二次
你好,应该是 onload 的原因。
你这样的len2只是把body的class为on的子元素获取到了,所以len2.length=1; 我上面的len2是把所有为on的元素获取到了,所以我的len2.length=3; 但是我们俩这样提交都会弹出多下。
window.onload=function(){ var len1= getByClass("on","list"); console.log(len1.length); // 结果等于2为正确 var len2= getByClass("on"); console.log(len2.length); // 结果等于1为正确 } function getByClass(clsName, parent){ //定义函数getByClass()实现获取document或指定父元素下所有class为on的元素 var oP = parent?document.getElementById(parent):document.body; var len = oP.children.length; var on = []; for (var i = 0; i < len; i++){ if(oP.children[i].className === clsName){ on.push(oP.children[i]); } } return on; }
不知道你想要的是不是这种结果。然后你获取的是元素,不是给元素绑定事件,和事件冒泡关系不大吧,我了解的事件冒泡就是应用在动态绑定事件的时候,不知道子元素个数或者子元素个数动态变化时在父元素绑定事件,利用事件冒泡来进行事件处理。
上面html里面的body 把class丢了,晕,这里补上
<body>
<ul id="list">
<li class="on">1</li>
<li class="select">2</li>
<li class="on">3</li>
<li>4</li>
</ul>
<p class="on">class为on的p标签</p>
</body>
-----------------------------