2013-08-06 6 views
2

Я настраиваю Sage CRM, поэтому я не могу контролировать HTML-код, который написан, и не может добавлять идентификаторы или классы в таблицы, в которых используются плюсы CRM вне. Я хочу скрыть верхнюю (не верхнюю) таблицу уровней на основе выбора пользователем раскрывающегося списка. Я могу получить только селектор jQuery, подключенный к строке заголовка таблицы в таблице, которую я хочу скрыть.Используйте JQuery, чтобы найти родительскую таблицу таблицы td

DOM-выходит что-то вроде:

//Lots of other table structures above this in the DOM.... 
<table> <---- this is the table I want to show or hide based on the users selection 
    <tbody> 
    <tr> 
    <td> 
     <table> 
     <tbody> 
      <tr> 
      <td class="PANEREPEAT"> <---- this is the node I can get selector to 
       Valuation information 
//// 

Так что я ниже стороне клиента JavaScript:

var val_information_screen; 

    $('.PANEREPEAT').filter(function() { 
     //Find the valuation information screen 
     return $(this).text() == 'Valuation information'; 
    }).each(function() { //iterate through all of these (there should only be one!) 
     val_information_screen = $(this); 
    }); 

    var sel_ofee_type = $('#ofee_type'); 
    if (sel_ofee_type.val() == '006') { 
     val_information_screen.closest('table').parents("table:first").show(); 
    } else { 
     val_information_screen.closest('table').parents("table:first").hide(); 
    } 

Это работа, это просто не особо красиво. Бит, который я действительно ненавижу, ниже. Есть ли лучший способ переместить DOM с помощью jQuery?

val_information_screen.closest('table').parents("table:first").show(); 
val_information_screen.closest('table').parents("table:first").hide(); 
+0

'.closest()' и '.parents()' (и '.parent()') - это то, как вы проходите DOM. Вы можете использовать '.closest (" table "). Closeest (" table ")' или '.parents (" table "). Eq (1)' – Ian

+0

@ Если вы правы, в основном, но обратите внимание, что '.closest() 'будет включать в себя стартовый узел как совпадение. То есть ближайший '

' от '
' будет этой самой таблицей, поэтому должен быть промежуточный вызов '.parent()'. (Думаю.) – Pointy

+0

@Pointy Oh snap! Хорошая точка зрения. Да, ты прав. Обычно я помню '.closest()' начинает смотреть на текущий элемент, но даже не думал об этом для прикованных вызовов '.closest()' с тем же селектором! – Ian

ответ

6

Если вы уверены, что он имеет фиксированную структуру, то вы можете использовать это,

$(td-selector).parents("table").eq(1).hide(); 

В вашем случае,

val_information_screen.parents("table").eq(1).hide(); 
+0

DOM исправлена, и это обеспечивает более элегантное решение и функции. Спасибо за вашу помощь. Чтобы быть ясным, если бы я захотел шагнуть на один стол дальше UP DOM, я бы изменил .eq (1) на .eq (2)? – MagicalArmchair

+1

yup. В точку... –

0

Если DOM (в частности, исходя из таблицы, которую вы хотите спрятаться до тех пор, пока td, который у вас есть как селектор) в значительной степени фиксирован, тогда можно использовать селектор ниже.

$('#element').parents('table').eq(1) 
Смежные вопросы