我们已经在Xinha文本编辑器中编写了一个插件来处理脚注。你可以看看:http://www.nicholasbs.com/xinha/examples/Newbie.html
为了处理Webkit和IE处理行尾链接的方式的一些问题(没有办法使用光标离开同一行上的链接),我们插入一个空白元素并将选定内容移动到该元素,然后向右折叠。这在Webkit和Gecko中工作得很好,但由于某些原因,moveToElementText会抛出无效参数异常。我们将哪个元素传递给它并不重要,这个函数似乎完全被破坏了。但是,在其他代码路径中,此函数似乎可以工作。
要使用上面的链接重现错误,请在主文本输入区域中单击,键入任何内容,然后单击带有绿色加号的黄色页面图标,在lightbox对话框中键入任何内容,然后单击插入。以下是导致问题的代码示例:
if (Xinha.is_ie)
{
var mysel = editor.getSelection();
var myrange = doc.body.createTextRange();
myrange.moveToElementText(newel);
} else
{
editor.selectNodeContents(newel, false);
}
有问题的代码保存在svn中:https://svn.openplans.org/svn/xinha_dev/InsertNote
此插件是针对Xinha的一个分支构建的,可从svn获得:http://svn.xinha.webfactional.com/branches/new-dialogs
发布于 2008-09-23 10:35:08
它在上面的代码片段中不可见,但是newel已经使用另一个本身附加到DOM的元素附加到dom。插入dom元素时,如果希望引用它的同级元素,则必须重新检索句柄,因为句柄无效(我不确定,但我认为它引用的是文档片段中的DOM元素,而不是文档中的DOM元素)。从insert操作重新检索句柄后,moveToElementText停止抛出异常。
发布于 2008-09-23 19:01:04
在实现WYSIWYG编辑器时,我有过多次调试IE异常的不幸经历,当DOM节点当前不在所呈现的文档中时,访问DOM节点上的属性(如.parentNode)或将DOM节点传递给函数(如moveToElementText)时,总是会出现这种情况。
正如您所说的,有时DOM节点是从浏览器呈现的“实际”DOM中删除的文档片段的一部分,而有时节点还没有被插入。无论哪种方式,在DOM节点上都有许多属性和方法,只有在“实际的”DOM中正确插入并呈现节点后,才能在IE6中安全地访问这些属性和方法。
真正的问题是,IE6的“无效参数”异常的这种表现形式通常不能通过try/catch来保护。
https://stackoverflow.com/questions/122546
复制相似问题