我有一个大约500 div的页面如下.
<div onclick='test()' class='test>
<ul class='innermenu'>
<li>1</li>
.....
</ul>
</div>
Run Code Online (Sandbox Code Playgroud)
当调用测试函数时,它需要隐藏调用该函数的菜单(innermenu).
我的问题是
唯一标识div而不使用id
如何仅隐藏特定的ul.
好的,首先是快速修复,虽然这不是在页面上使用JS的最佳方式:
将呼叫更改为:
<div onclick="test(this);" class="test">
Run Code Online (Sandbox Code Playgroud)
然后,在测试中,使用此:
function test(el){
var uls = el.getElementsByTagName('ul');
for(var i = 0; i < uls.length; i++){
if(uls[i].className == 'innermenu'){
uls[i].style.display = "none";
break;
}
}
}
Run Code Online (Sandbox Code Playgroud)
这将隐藏刚子ul
的div
被点击.
一个更好的方法
好的,答案更长.事后使用attachEvent
和附加事件,addEventListener
或者使用像jQuery这样的库来帮助你.这是原始解决方案:
以这种方式设置HTML(否onclick
):
<div class="test">
Run Code Online (Sandbox Code Playgroud)
然后在HTML的最后放置这个:
<script type="text/javascript">
var divs = document.getElementsByTagName('div');
function test(){
var uls = this.getElementsByTagName('ul');
for(var i = 0; i < uls.length; i++){
if(uls[i].className == 'innermenu'){
uls[i].style.display = "none";
break;
}
}
};
for(var i = 0; i < divs.length; i++){
var div = divs[i];
if(div.className !== "test") continue;
if(window.addEventListener){
div.addEventListener( 'click', test, true ); //FF, Webkit, etc
} else if (window.attachEvent) {
div.attachEvent('onclick', test); // IE
} else {
div.onclick = test; // Fallback
}
}
</script>
Run Code Online (Sandbox Code Playgroud)
现在,您的HTML中没有JavaScript代码,您可以删除函数上的额外参数test
.
归档时间: |
|
查看次数: |
6496 次 |
最近记录: |