为什么StyleSheet 的ownerNode 插入后为null?
Why is StyleSheet's ownerNode null after insertion?
有人可以解释为什么 StyleSheet
的 ownerNode
在我将它的 textContent
设置为某个值后是 null
吗?
const style = document.createElement('style')
document.head.appendChild(style)
const sheet = style.sheet
// passes
console.assert(sheet.ownerNode !== null, 'ownerNode is null')
sheet.ownerNode.textContent = 'div { color: red }'
// fails
console.assert(sheet.ownerNode !== null, 'ownerNode is null')
因为通过完全替换节点的文本,您创建了一个 new,替换样式表对象:
const style = document.createElement('style')
document.head.appendChild(style)
const sheet = style.sheet
sheet.ownerNode.textContent = 'div { color: red }'
console.log(style.sheet === sheet); // <===== false!
console.log(style.sheet.ownerNode === style); // <===== true
旧版本不在 DOM 中,因此它没有 ownerNode
。
有人可以解释为什么 StyleSheet
的 ownerNode
在我将它的 textContent
设置为某个值后是 null
吗?
const style = document.createElement('style')
document.head.appendChild(style)
const sheet = style.sheet
// passes
console.assert(sheet.ownerNode !== null, 'ownerNode is null')
sheet.ownerNode.textContent = 'div { color: red }'
// fails
console.assert(sheet.ownerNode !== null, 'ownerNode is null')
因为通过完全替换节点的文本,您创建了一个 new,替换样式表对象:
const style = document.createElement('style')
document.head.appendChild(style)
const sheet = style.sheet
sheet.ownerNode.textContent = 'div { color: red }'
console.log(style.sheet === sheet); // <===== false!
console.log(style.sheet.ownerNode === style); // <===== true
旧版本不在 DOM 中,因此它没有 ownerNode
。