问题标签 [dom4]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
javascript - 创建一个 HTMLCollection
我正在尝试填充Element.prototype.children
应该返回HTMLCollection
然而
和
测试 Firefox 7 和 Chrome
除了 shimming HTMLCollection
,还有什么方法可以与之交互吗?
如果您可以提出解决方案,还请提供有关此 github 问题的反馈
javascript - 何时使用 querySelectorAll
在我写的一段示例代码中
我在想我可以用
var as = document.querySelectorAll("a.false");
现在在阅读以下事实后
- 假装浏览器支持不是问题(我们有 shims 和 polyfills)。
- 假装你不在你的通用 jQuery 思维模式中,你应该使用 QSA 来获取每个元素。
- 我要写
qsa
而不是document.querySelectorAll
因为我很懒。
问题:我什么时候应该优先使用 QSA 而不是常规方法?
很明显,如果你做错了,或者qsa("a")
你做错了,因为有更好的方法(byTagName、byClassName、byId)。qsa(".class")
qsa("#id")
很明显,这qsa("div > p.magic")
是一个合理的用例。
问题:但是qsa("tagName.class")
QSA 是一个好的用例吗?
此外,还有这些东西叫做NodeIterator
我问了一个关于QSA 与 NodeIterator的问题
javascript - 何时使用 NodeIterator
基准比较 QSA & .forEach
vs aNodeIterator
现在要么NodeIterator
很烂,要么我做错了。
问题:我应该什么时候使用NodeIterator
?
如果您不知道,DOM4 指定了NodeIterator是什么。
javascript - 跨浏览器比较文档位置
我想实现 compareDocumentPosition。Resig 在这方面取得了良好的开端。我已经拿走了他的代码并整理了它
这适用于Element
但不适用于Text
or DocumentFragment
。.sourceIndex
这是因为 IE8在这些节点上没有给出。(它也没有给出.contains
,但我已经解决了这个问题)
如何有效地编写与DOCUMENT_POSITION_FOLLOWING和DOCUMENT_POSITION_PRECEDING对应的+=4
和位。+=2
作为额外参考,这两个由 DOM4 定义为的树顺序定义
如果 A 和 B 在同一棵树中并且 A 在树顺序中位于 B 之前,则对象 A 在对象 B 之前。
如果 A 和 B 在同一棵树中并且 A 按树顺序在 B 之后,则对象 A 跟随对象 B。
树顺序是前序,深度优先遍历。
大多数现代浏览器都实现了这一点(包括 IE9)。所以你只需要在 IE8 中工作的东西(我不关心 IE6/7,但如果它工作得很棒!)
javascript - 什么会引发 DOMErrors
介绍
DOMError是由 DOM 定义的接口。
我想检查浏览器是否支持它。一个天真的检查是
window.DOMError !== undefined
更好的检查是使用引发 DOMError 的操作并检查
err instanceof DOMError === true
问题
哪些操作会引发 DOMErrors?
javascript - 如何模拟 Event.timeStamp
timeStamp 属性必须返回它被初始化的值。创建事件时,必须将属性初始化为自 1970 年 1 月 1 日 00:00:00 UTC 以来经过的毫秒数。
可以捕获两者new Event
并document.createEvent
相应地设置时间戳,但是如何拦截浏览器创建和调度的事件?
可以将一个事件侦听器(捕获阶段)添加到document
侦听“每个”事件类型的事件侦听器中,并将 timeStamp 编写为接近调度时间,但这将是一个丑陋的 hack。
- 有没有更好的模仿方式
Event.timeStamp
? new Event
拦截/new CustomEvent
和document.createEvent
.是否有任何潜在的陷阱?- 是否有其他方式以编程方式创建事件?
- 尽早添加事件侦听器
document
并手动设置是否有任何潜在问题?timeStamp
javascript - 为什么在 Firefox 中 event.timeStamp 为 0?
在 Firefox 中,第一个 timeStamp 是0
,而在 chrome 中,时间戳是一个合理的数字。
在 Firefox 和 chrome 中,第二个 timeStamp 是一个合理的数字。
javascript - hasChildNodes 与 firstChild
比较上面的两段伪代码,它们都附加了div
to的每个子级,fragment
直到没有更多子级为止。
- 你什么时候喜欢
hasChildNodes
或者firstChild
它们看起来相同。 - 如果 API 如此相似,那么为什么它们都存在。
hasChildNodes()
当我可以强制firstChild
从null
到时为什么存在false
javascript - DOM4:不推荐使用的属性和方法,这是什么意思?
“警告:在 DOM Core 1、2 和 3 中,Attr 继承自 Node。在 DOM4 中不再是这种情况。为了使 Attr 的实现符合规范,正在努力将其更改为不再继承自 Node . 您不应该在 Attr 对象上使用任何 Node 属性或方法。从 Gecko 7.0 (Firefox 7.0 / Thunderbird 7.0 / SeaMonkey 2.4) 开始,将要删除的那些将向控制台输出警告消息。您应该修改您的代码相应地。有关完整列表,请参阅弃用的属性和方法。”
向下滚动页面,我们可以看到 nodeName 和 NodeValue 的替换,使用 Attr.name 和 Attr.value。
https://developer.mozilla.org/en/DOM/Attr#Deprecated_properties_and_methods
对于属性或 childNodes 等其他方法,它到底意味着什么?参考资料说它已被弃用,但他们没有提供任何替代品!
它已被 Attribute 弃用,但它也适用于 Node 吗?
属性对象:http ://www.w3schools.com/jsref/dom_obj_attr.asp
编辑:nodeValue 将仅被弃用为属性(Attr),因为 Attr 将不再从 DOM 级别 4 中的节点继承:
这是一个帮助我理解的简单示例:
也许这会在访问属性/节点时避免其他人混淆:)