2016-11-23 2 views
0

Я использую angularjs. Моя структура, как это (внутри большой таблицы - просто показывает одну ячейку):DIV внутри td не найден родительский

<td> 
    <div> 
    <label>OU5NS1E2IE1L</label> 
    <i class="fa fa-times" aria-hidden="true" 
    ng-click="DeleteElementFromSession($event);"></i> 
    </div> 
    </td> 

При вызове DeleteElementFromSession эту строку кода:

$(event.currentTarget).parent() 

возвращает DIV, который является правильным. Но я хочу вернуть элемент <td>, где находится DIV. Я не знаю, почему, звонок к этому не возвращает элемент <td>? Она не возвращает ничего:

$(event.currentTarget).parent().parent() 

<i> находится внутри DIV и DIV находится внутри td так, на мой взгляд, это должно работать, но это не так. Зачем?

+3

Вы можете использовать вместо этого '$ (event.currentTarget) .closest ('td')', но если это не сработает, то отображаемая разметка HTML отличается от той, которую вы опубликовали, может быть, потому что она неверна или неверна. –

+0

try: $ (event.currentTarget) .parents ('td'); – Havihavi

+0

@ Хавихави - это тоже не работает. Действительно странно. – FrenkyB

ответ

0

для этого вам нужно родителю ближе:

$(event.currentTarget).parent().closest('td') 
+0

Это тоже не работает ... действительно странный. – FrenkyB

+0

вам нужно показать мне полный html, чтобы я мог определить, какой родитель вы хотите –

1

Согласно Угловой JS документа:

https://docs.angularjs.org/api/ng/function/angular.element

родителя() - Не поддерживает селекторы

родитель из jqLite, который содержит некоторые функции JQuery.

В соответствии с JQuery документ:

https://api.jquery.com/parent/

Этот метод аналогичен .parents(), за исключением .parent() только путешествует один уровень вверх по DOM-дерева.

допускается только однократное перемещение вверх.

+0

Что относительно гнездования .parent()? $ (Элемент).parent(). parent() - каждый раз он должен подниматься на один уровень. – FrenkyB

+0

@FrenkyB $ (элемент) .parent() результат не будет поддерживать селектор, .parent() также является одним из селекторов, поэтому вы не можете использовать вложенность .parent() – sreeramu

1

Браузер устраняет <td> узел из DOM, потому что это не законно HTML.

Узел <td> должен быть дочерним узлом <table> и <tr>.

<table> 
    <tr> 
     <td id="tdNode1"> 
     <div> 
      <label>OU5NS1E2IE1L</label> 
      <i class="fa fa-times" aria-hidden="true" 
      ng-click="DeleteElementFromSession($event);">CLICK HERE</i> 
     </div> 
     </td> 
    </tr> 
    </table> 

Тогда браузер будет включать <td> узел в DOM и elem.parent().parent() найдет <td> узел.

app.controller("myVm", function($scope) { 
    var vm=$scope; 
    vm.DeleteElementFromSession = function(e) { 
     var elem = angular.element(e.currentTarget); 
     vm.id = elem.parent().parent().attr("id"); 
    } 
}); 

DEMO on JSFiddle.

Смежные вопросы