Firefox和Chrome处理不同的选择吗?

时间:2019-08-08 16:07:11

标签: javascript event-handling

我正在尝试使用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>似乎返回了预期的对象。如果我在浏览器控制台中对其进行检查,则其getSelectionfocusNode中的nodeText;但是如果我实际上尝试使用focusNode,它将返回进入contenteditable之前的对象。例如,如果我单击导航栏中的某些文本,然后单击contenteditable,它将在导航栏中返回nodeText。 知道为什么吗? 谢谢。

1 个答案:

答案 0 :(得分:0)

getSelection()不会返回DomNode而是返回一个Selection对象,根据您的结果,我怀疑它是一个 live 值,就像{{1} }是node.childNodes,如果您添加或删除子代,它将自动更新。 因此,当选择更改时,您会神奇地得到新的选择。