【问题标题】:Value of window.getSelection() changes during callbackwindow.getSelection() 的值在回调期间发生变化
【发布时间】:2012-03-10 20:16:01
【问题描述】:

我正在尝试存储 window.getSelection() 的值,但如果用户选择另一个选择,该值似乎会发生变化。

在下面的代码中,我存储了初始用户的选择。然后我创建我的表单(这需要一些时间),当表单创建完成后,我用用户的选择填写表单。现在在创建表单的过程中,用户可能会选择其他一些文本,现在存储在我的选择变量中的对象已经改变。如何防止 selection 的值被更改?

var selection = window.getSelection();

createForm(function() {
    fillInForm(selection);
});

编辑 - 我需要保留所选内容的 DOM 结构,因为表单引用了所选文本的位置。

【问题讨论】:

  • 你能多放一些你的代码吗?可能有一种添加闭包的方法,但取决于您的其余代码

标签: javascript callback getselection


【解决方案1】:

getSelection 函数返回一个Selection 对象。每个文档只能有一个选择对象,因此如果用户做出新的选择,与选择关联的范围必须改变。

用户代理应该允许用户更改活动文档的选择。如果用户对选择进行任何修改,用户代理必须创建一个具有合适开始和结束的新范围,并将选择与这个新范围相关联(而不是修改现有范围)。

[...]

如果用户更改选择或脚本调用 addRange(),则选择必须与新的范围对象相关联,如本规范其他地方所要求的那样。

http://dvcs.w3.org/hg/editing/raw-file/tip/editing.html#selections

【讨论】:

  • 换句话说,如果用户代理选择另一个范围,我原来的选择变量现在将保持这个新范围?我怎样才能保留我原来的选择?我曾想过创建一个临时范围来保存原始数据,但是一旦选择再次更改,它不会被覆盖吗?
  • @icu222much 我不太确定...您可以将其序列化为字符串或尝试使用Object.create“克隆”它
猜你喜欢
  • 1970-01-01
  • 2019-08-10
  • 2015-01-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-13
相关资源
最近更新 更多