2013-07-05 5 views
0

Я вставил элементы в DOM с помощью appendTo(). Я пытаюсь пройти DOM из добавленных элементов, чтобы получить ссылку на элемент, к которому добавлены прикрепленные элементы. Но это, похоже, не работает для меня. Я попытался устранить неполадки, выведя результат из parent() на консоль. Каждый раз, когда я отступаю на один уровень, я получаю результат от parent(), пока не дойду до родителя добавленного элемента. В этот момент parent() возвращает пустой набор.Получить родительский элемент добавленного элемента

Вот пример кода, чтобы проиллюстрировать эту проблему:

<div class="menu"> 
    <span class="like current"></span> 
    <span class="done"></span> 
    <span class="add"></span> 
    <span class="report"></span> 
    <div class="panel"> 
     <div class="panel-content"> 
      <p>This function is not yet implemented</p> 
      <p> 
       <a class="cancel" onclick="cancel_panel(this)">Cancel</a> 
      </p> 
     </div> 
    </div> 
    </div> 

был приложенный к div.menu с appendTo() и div.panel-content был приложенный к с appendTo()

То, что я пытаюсь достичь следует удалить класс current от span.like при нажатии на ссылку «Отмена».

Я пробовал:

$(elem).closest("div.menu").children("span.current").removeClass("current"); 

(где эль является ссылка на a элемент ссылки Отмены)

Но это не работает. $(elem).closest("div.menu") возвращает пустой набор вместо div.menu

В дальнейшем устранении неисправностей, $(elem).parent() дает мне ожидаемую ссылку на p теге, $(elem).parent().parent().parent() дает мне ожидаемую ссылку на . Но $(elem).parent().parent().parent().parent() возвращает пустой набор.

Что здесь происходит? Не присоединяются ли присоединенные элементы так же, как реальные элементы при обходе DOM? Разве jquery освобождает сюжет с вложенными дополнениями? Как я могу получить ссылку на страницу div.menu?

+0

Пространства обычно не являются самозакрывающимися. Какой у тебя тип? – j08691

+0

в реальном коде они не являются - код здесь просто усечен/упрощен с целью вопроса – AidanCurran

+1

Кажется, здесь работает ... http://jsfiddle.net/hungerpain/mEJbF/1/ все, что я изменил, было то, что я вынул «onclick» и сделал его событием 'click' jQuery – krishgopinath

ответ

0

Попробуйте найти свой «как текущий» класс и переименовать в «как» в этом элементе

+0

извините, это не ответ на мой вопрос – AidanCurran

1

Я пытался воспроизвести вашу проблему here со сценарием:

$(function() { 

    var elem = $('<a class="cancel">Cancel</a>') 
     .click(cancel_panel) 
     .appendTo($(".panel-content").children().last()); 


    function cancel_panel() {     
     $(elem).closest("div.menu") 
     .children("span.current") 
     .removeClass("current"); 
    }  
}); 

& выше HTML. Но не мог найти какие-либо проблемы с:

$(elem).closest("div.menu").children("span.current").removeClass("current"); 

ли взглянуть на него & проверить, если проблема заключается еще где.

0
$(elem).parents().filter(".menu").children("span.current").removeClass("current"); 

Я сделал тест here и это, кажется, работает отлично.

0

Проблема решена. jQuery DOM обход добавленных элементов работает отлично. демоверсия jsfiddle от hungerpain доказала, что с частью кода, включенной в мой вопрос, нет проблемы. Это было что-то еще. Пересмотрев мой код, я обнаружил, что я удалил из DOM, прежде чем пытаться пересечь его выше, поэтому неудивительно, что это не сработало!