2013-03-19 93 views
3

尝试插入带有insertbefore的选项时,出现此错误。 未被捕获的错误:HierarchyRequestError:DOM例外3HierarchyRequestError:尝试插入之前试图插入的DOM例外3

var target = $('#divA option:selected').prev().first(); 
    var options = $('#divA option:selected'); 
    if (options.prev().text() == target.text()) { 
     return; 
    } 
    options.insertBefore(target); 

如果options.length > 2发生此错误,如果它是1或2是没有问题的。 当多重选择进入最高时,所有选定的项目将消失。 有什么问题?你可以帮帮我吗?

样本:(即它 是不可能http://jsfiddle.net/tHVsw/

+0

你可以在http://jsfiddle.net上提供演示吗?当您尝试在其之前/之后插入元素时,会发生这种情况。 – undefined 2013-03-19 09:11:12

+0

是的,http://jsfiddle.net/tHVsw/,你也可以从这里看到, 当多重选择到最高时,所有选中的项目都会消失。 – ale 2013-03-19 09:30:16

+0

如果一个操作会在层次结构中创建一个循环(将父项添加到它的后代),也会发生这种情况。 – 2016-06-26 22:10:04

回答

5

此错误时不允许的元素DOM中的特定点插入抛出,你可以使用一个if语句检查无论插入是否可能。

if (!target.prev().length) 
    target.parent().prepend(options); 
else 
    target.before(options); 

如果目标元件的前一个兄弟的length是0,预先设置元件(一个或多个)父元素,目标元素之前否则将其插入。

http://jsfiddle.net/fKx68/