2

有人可以解释为什么 a StyleSheet'sownerNodenull我将其设置textContent为某物之后吗?

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')

4

1 回答 1

1

因为通过完全替换节点的文本,您创建了一个的替换样式表对象:

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.

于 2018-10-06T18:22:48.090 回答