无法通过JS更改显示
问题出现的原因是由于使用JavaScript无法通过修改display属性来改变元素的显示状态。这个问题可以通过以下方法解决。
解决方法:
- 使用Element.children
方法可以获取元素的子元素节点,而Node.childNodes
方法可以获取所有的子节点,包括元素节点和文本节点。注意,元素节点也是节点,所以两种方法都可以在元素上使用。
- 通常情况下,childNodes
方法更可靠。例如,MDC(上面的链接)指出,在IE 9之前,IE只能正确地使用children
方法。而childNodes
方法则对浏览器的实现者提供了更少的错误空间。
- 遗憾的是,如果这个方法在IE 6-8上能够正常工作,那就太完美了。
- 事实上,这个方法确实可以使用(在某种程度上)。显然,.children
方法不会过滤掉注释节点,但是它会过滤掉文本节点。
- 同样的问题也出现在.getElementsByTagName('*')
方法上。IE有时候真的很令人恼火...
- 可以使用一些shim/polyfill的实现来支持IE中的children
方法。
最近的回答已经很好了,我只想补充一点,你可以使用nodeType
来检查节点的类型:
yourElement.nodeType
这将给您一个整数:(取自这里)
| 值 | 常量 | 描述 |
|----|----------------------|-------------------------------------------------------|
| 1 | Node.ELEMENT_NODE | 像<p>或<div>这样的元素节点。 |
| 2 | Node.ATTRIBUTE_NODE | 元素的属性。在DOM4规范中,元素属性不再实现Node接口。 |
| 3 | Node.TEXT_NODE | 元素或属性的实际文本。 |
| 4 | Node.CDATA_SECTION_NODE | CDATASection。 |
| 5 | Node.ENTITY_REFERENCE_NODE | XML实体引用节点。在DOM4规范中已删除。 |
| 6 | Node.ENTITY_NODE | XML <!ENTITY ...>节点。在DOM4规范中已删除。 |
| 7 | Node.PROCESSING_INSTRUCTION_NODE | XML文档的ProcessingInstruction,如<?xml-stylesheet ... ?>声明。 |
| 8 | Node.COMMENT_NODE | 注释节点。 |
| 9 | Node.DOCUMENT_NODE | 文档节点。 |
| 10 | Node.DOCUMENT_TYPE_NODE | DocumentType节点,例如HTML5文档的<!DOCTYPE html>。 |
| 11 | Node.DOCUMENT_FRAGMENT_NODE | DocumentFragment节点。 |
| 12 | Node.NOTATION_NODE | XML <!NOTATION ...>节点。在DOM4规范中已删除。 |
请注意,根据Mozilla的说法:
以下常量已被弃用,不应再使用:Node.ATTRIBUTE_NODE,Node.ENTITY_REFERENCE_NODE,Node.ENTITY_NODE,Node.NOTATION_NODE
根据上述内容,我们可以看到通过JavaScript无法通过更改显示的方式来改变display属性的值。