2013-08-28 2 views
9

Мой вопрос аналогичен this one, но вместо добавления строки я хочу добавить его.AngularJS - добавить строку после элемента в директиве

Это не работает:

app.directive('createTable', function ($compile) { 
    return { 
    link: function (scope, element, attrs) { 
     var contentTr = angular.element('<tr><td>test</td></tr>'); 
     contentTr.parentNode.insertBefore(element, contentTr.nextSibling); 
     $compile(contentTr)(scope); 
    } 
    } 
}); 

ответ

16

Это делает работу:

app.directive('createTable', function ($compile) { 
    return { 
     link: function(scope, element, attrs) { 
      if (element.next().length) { 
       element.next().insertBefore(element); 
      } 

      var contentTr = angular.element('<tr><td>test</td></tr>'); 
      contentTr.insertAfter(element); 
      $compile(contentTr)(scope); 
     } 
    } 
}); 

http://jsfiddle.net/3gt9J/3/

+16

jqLite не имеет insertAfter, поэтому, если вы не используете jQuery, вы должны использовать. После. – Andrew

+0

Вопрос: зачем вам менять элементы? Я не понимаю, почему он не «просто работает», если вы добавляете элементы, которые нужно вставить в текущий элемент. – Claudiu

+0

Требуется своп, потому что каждая строка повтора отображается в исходном положении (перед любыми уже добавленными нами строками). Таким образом, swap просто проверяет, есть ли добавленная строка после и перемещает ее перед текущей строкой. – noj

3

Я думаю, что вам нужно

app.directive('createTable', function ($compile) { 
    return { 
     link: function (scope, element, attrs) { 
      var contentTr = angular.element('<tr><td>test</td></tr>'); 
      contentTr.insertAfter(element); 
      $compile(contentTr)(scope); 
     } 
    } 
}); 

Демо: Fiddle

+1

Спасибо, но он не работает, как я хочу - он добавляет все строки в конце таблицы. См. Мое обновление: http://jsfiddle.net/3gt9J/2/ – kuboslav

0

Просто хотел что-то добавить, потому что у меня было несколько минут, пока он не сработал. Если у вас нет jQuery в вашем проекте, вы не можете использовать insertAfter. Просто используйте after() от jQuery API .after()

Мне нужно было добавить некоторые элементы в мою директиву между другими детьми.

element.children().eq(0).after(angular.element('<p>Test</p>')); 
Смежные вопросы