2013-03-19 102 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/