2013-03-19 3 views
3

При попытке вставить опцию с insertbefore, я получаю эту ошибку. Uncaught Ошибка: HierarchyRequestError: DOM Исключение 3HierarchyRequestError: DOM Exception 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

+0

да, http://jsfiddle.net/tHVsw/, а также вы можете видеть здесь, , когда множественный выбор идет вверх, все выбранные элементы исчезнут. – ale

+0

Это также может произойти, если операция создаст цикл в иерархии (добавьте родителя к его потомству). –

ответ

5

Эта ошибка возникает, когда вставка элемента к определенной точке в DOM не допускается, вы можете использовать if заявление для проверки возможна ли установка или нет.

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

Если length предыдущего собрата целевого элемента равен 0, предварять элемент (ы) для родительского элемента, в противном случае вставить его до целевого элемента.

http://jsfiddle.net/fKx68/