鼠标悬停UL子节点不正确
Mouseover UL Child Nodes Not Right
这适用于IE8,但不适用于IE9、FF8或FF9。不过,这似乎是应该奏效的。
预期行为:当你滚动LI时,它应该弹出一个带有该节点的LI id的警报。
实际行为是,当您滚动到第二个元素(node[1])上时,它会提醒node[0]的id。当您在节点[0]或节点[2]上滚动时,警报会给出一个未定义的。
有人能帮我弄清楚吗?
<!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" />
<style type="text/css">
.outputUl{
margin: 0;
padding: 0px;
list-style: none;
width: 200px;
}
.outputLi {
}
.outputLiSelect {
background-color: #069;
cursor: pointer;
}
</style>
</head>
<body>
<ul class="outputUl" id="meganFox">
<li id="li1"
class="outputLi"
onmouseover="setSelect(1);">Frank</li>
<li id="li2"
class="outputLi"
onmouseover="setSelect(2);">Bob</li>
<li id="li3"
class="outputLi"
onmouseover="setSelect(3);">Jeff</li>
</ul>
<script language="javascript">
function setSelect( num ){
var nodes = document.getElementById('meganFox').childNodes;
num = num - 1;
nodes[num].className = 'outputLiSelect';
alert( 'id '+nodes[num].id );
}
</script>
</body>
</html>
childNodes集合在某些浏览器上包含空文本节点。您需要循环遍历它们,并且只考虑nodeType=1(HTML元素)的节点。
我已经使用了上面的代码,并添加了一个新的方法getChildElements()
,它就是这样做的。试试看它是否能解决问题。
也就是说,Eugen Rieck的解决方案更优雅——他将受影响的元素直接传递给setSelect
方法,而不是篡改索引。
<!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" />
<style type="text/css">
.outputUl { margin: 0; padding: 0px; list-style: none; width: 200px; }
.outputLi { }
.outputLiSelect { background-color: #069; cursor: pointer; }
</style>
</head>
<body>
<ul class="outputUl" id="meganFox">
<li id="li1" class="outputLi" onmouseover="setSelect(1);">Frank</li>
<li id="li2" class="outputLi" onmouseover="setSelect(2);">Bob</li>
<li id="li3" class="outputLi" onmouseover="setSelect(3);">Jeff</li>
</ul>
<script language="javascript">
function setSelect( num )
{
var nodes = getChildElements(document.getElementById('meganFox'));
num = num - 1;
nodes[num].className = 'outputLiSelect';
alert( 'id '+nodes[num].id );
}
function getChildElements(parentNode)
{
var list = [];
if (parentNode.childNodes)
{
var nodes = parentNode.childNodes;
for (var i = 0, len = nodes.length; i < len; i++)
{
// only include nodes that are HTML elements
if (nodes[i].nodeType == 1)
list.push(nodes[i]);
}
}
return list;
}
</script>
</body>
</html>
怎么样
onmouseover="setSelect(this);"
和
function setSelect(node) {
node.className='outputLiSelect';
alert('id '+node.id);
}
在您的代码中。节点从1开始。所以不要使用num=num-1;
相关文章:
- 选择<李>使用普通JavaScript的子节点,而不是孙节点
- 删除HTML节点而不删除其子节点
- Kinetic.js旋转组对象的新子对象具有不正确的偏移
- 获取下一个不工作Javascript DOM的同级父节点的子节点
- 在 dom 元素中插入跨度而不覆盖子节点
- 子节点不会离开父节点
- JSTREE open_node不在子节点上工作
- DOM 附加文本节点的子节点不起作用
- 从 MySQL 数据库获取数据时节点.js流不正确
- 添加相同的子节点时,不能多次调用Javascript insertBefore方法
- IE9中的XML DOM子节点不支持for.in语句
- FancyTree:节点对象在拖动到根级别时不正确
- child_process.spawn()不是't正在等待子节点进程完成
- 鼠标悬停UL子节点不正确
- 使用Internet Explorer的子节点不工作
- 替换节点顶层的文本而不破坏子节点的格式
- Jquery .remove事件只在父节点,而不是子节点
- 这种情况下,父节点在CSS中不包含子节点的高度
- Javascript子节点不能正确显示
- 设置跨度文本节点的样式而不设置子节点的样式