2013-06-25 4 views
2

Хорошо, я пытался использовать функцию jquery .closest(). Я провел некоторое исследование, но это, должно быть, логика, которую я не могу понять, и это заставляет меня сходить с ума. Итак, вот код, пожалуйста, помогите.Как получить jquery .closest() для работы в этой конкретной ситуации?

<div class="tablecontainer"> 

mvcpartial с

<div class="emptycontainer"><p>no data in table</p></div> 
<div class="populatedcontainer"><table><thead><tr></tr></thead> 
    <tbody> 
     <tr> 
      <td><a onclick="deleteRow(this, @Model.ID)"></td> 
     </tr> 
    </tbody> 
</table> 
</div> 

endpartial

</div> 

Функция deleteRow принимает в параметре (т.е., ID). Я могу удалить строку, но у меня возникают проблемы с исчезновением div.populatedcontainer и затуханием в div.emptycontainer, когда таблица пуста. Я попытался

var $table = $(that).closest('div.tablecontainer'); 
$('div.populatedcontainer', $table).fadeOut('slow'); 
$('div.emptycontainer', $table).fadeIn('slow'); 

Я попытался тестирования, если селектор был в состоянии найти div.tablecontainer с

if ($table.length > 0) { 
    console.log("located tablecontainer"); 
} 

но не отображаются в консоли во время отладки. Если это важно, есть несколько наборов div.tablecontainer на странице.

Я попробовал var table; (без $).

Я попробовал var $ that = $ (that);

Я попытался положить это вне «если таблица пуста логики», но она по-прежнему не работает

редактирования: по запросу Феликса Клинг

КОНЦЕРН имеет ссылку, которая вызывает следующую функцию, если щелкнул

onclick="deleteRow(this, @Model.ID) 

и функция принимает параметр как

function deleteRow(that, id){ 
    tried to do stuff like find the right div and fadeIn/fadeOut here (example attempts above) 
} 

Спасибо за все ответы. Особенно перспективны альтернативные методы. Мне нужно попробовать посмотреть, какие из них работают завтра, и обновить этот пост.

+1

Где находится '' '? Пожалуйста, опубликуйте подпись функции. –

+0

Что вы должны работать. Есть ли ошибки на консоли? –

ответ

1

jsFiddle Demo

Если все ваши структуры подобны, то вы можете просто использовать пред.

var $table = $(that).parents('.populatedcontainer:first'); 
$table.fadeOut('slow').prev('.emptycontainer:first').fadeIn('slow'); 
+0

Большое спасибо.Я закончил использовать это и запустил его, инициировав таблицу var $ вне оператора if и получив вторую строку fadeOut/fadeIn внутри оператора if, когда таблица пуста. –

0

Ну, без использования ближе но родители

var $table = $(that).parents('div.tablecontainer').eq(0); 
$table.find('div.populatedcontainer').fadeOut('slow'); 
$table.find('div.emptycontainer').fadeIn('slow'); 
+0

Нет необходимости использовать '.parents', если вы все равно хотите получить * one * ancestor. '.closest' - правильный метод для использования. –

0

Этот метод не использует .closest(), но поможет вам выполнить задачу. Предполагая, что у вас есть элемент, хранящийся в переменной под названием «это», вот что вам нужно сделать:

$(that).parent(".populatedContainer").siblings().fadeIn(); 
$(that).parent(".populatedContainer").fadeOut();