我正在尝试使用var xDoc = XDocument.Parse(str);
var xLoginResult = xDoc.Root.Descendants().FirstOrDefault(d => d.Name.LocalName.Equals("LoginResult"));
var serializer = new XmlSerializer(typeof(LoginResult));
using (var reader = xLoginResult.CreateReader())
{
var result = (LoginResult)serializer.Deserialize(reader);
}
和处理程序将插入符插入元素。在Firefox中,所有功能均按预期运行,如果我将处理程序用于onclick事件,则在Chrome上也可以正常运行。当处理程序用于contenteditable的contenteditable="true"
事件时,就会出现问题,这是我想做的。
这是我仅用来试图弄清为什么发生的代码。
onfocus
var editor = document.querySelector("#editor [contenteditable]");
var blackboard = document.querySelector("textarea");
editor.addEventListener('focus', () => {
blackboard.value = getSelection().focusNode.data;
console.log(getSelection(), getSelection().focusNode);
})
<div id="maq">
<textarea rows="44" cols="50">
</textarea>
</div>
<div id="editor">
<div contenteditable="true">
<p>11111</p>
<p>2222</p>
<p>3333<br></p>
</div>
</div>
似乎返回了预期的对象。如果我在浏览器控制台中对其进行检查,则其getSelection
是focusNode
中的nodeText;但是如果我实际上尝试使用focusNode,它将返回进入contenteditable
之前的对象。例如,如果我单击导航栏中的某些文本,然后单击contenteditable,它将在导航栏中返回nodeText。
知道为什么吗?
谢谢。
答案 0 :(得分:0)
getSelection()
不会返回DomNode而是返回一个Selection
对象,根据您的结果,我怀疑它是一个 live 值,就像{{1} }是node.childNodes
,如果您添加或删除子代,它将自动更新。
因此,当选择更改时,您会神奇地得到新的选择。