Pik*_*ass 11 html javascript dom
我正在管理Javascript中的名称列表.选中复选框后,您的姓名将显示在列表中.当你取消选中它时,它会被划掉.当您将框设置为不确定状态时,您的名称将被删除.
我已经在隐藏的div中获得了当前登录用户的名称.名称是具有样式属性的跨度.
我用isEqualNode检查名称是否已经在列表中.当页面加载时它在列表中,它工作正常:找到名称,因此当框选中状态更改时更新名称.
for(var i=0 ; i < bullet.childNodes.length ; i++) {
var node = bullet.childNodes[i];
if(node.className == 'crossed')
node = node.firstChild;
if(node.isEqualNode(document.getElementById('curUser').firstChild))
break;
}
// if i < bullet.childNodes.length, then we found the user's name in the list
Run Code Online (Sandbox Code Playgroud)
当名称不在列表中时,我克隆了span.
var newName = document.getElementById('curUser').firstChild.cloneNode(true);
bullet.appendChild(newName);
Run Code Online (Sandbox Code Playgroud)
这在视觉上有效.
但我偶然发现了一些棘手的事情:newName.isEqualNode(document.getElementById('curUser').firstChild)是假的!因此,如果盒状态再次改变,则不会找到新添加的名称,并且将再次创建新名称.
这是跨度的样子:
<span style="font-weight: bold ; color: #003380 ;">Pikrass</span>
Run Code Online (Sandbox Code Playgroud)
目前我只是简单地检查一下(我可以只检查跨度内的文本数据而不是依赖于isEqualNode),但我感兴趣的是为什么克隆节点可能与原始节点不同,根据isEqualNode.
相关规范:cloneNode,isEqualNode
编辑:我测试了Firefox和Chromium.使用Firefox isEqualNode返回false,但使用Chromium它返回true.感谢Felix指出这一点.
迟到总比不到好。:)
我无法再使用 Firefox 17 重现该问题,因此正如评论中所讨论的,这可能是 Gecko 中的一个错误,现已修复。
但是我找不到任何错误报告。我暂时将此答案标记为已接受,但如果有人可以找到错误报告或对幕后情况的解释,我会接受。
贝尔吉的评论对于其他两个答案来说是正确的。
| 归档时间: |
|
| 查看次数: |
1592 次 |
| 最近记录: |