2012-03-15 2 views
1

Это очень похоже на this question, но это не работает для меня. Я также посмотрел this и this, но все еще не работает.Как я могу получить приведенную выше таблицу при нажатии кнопки?

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

Мой код выглядит следующим образом:

<table id="t1"></table> 

<div class="bulk_action"> 
    <div title="Remove requests" class="trash_iconset_grey_16px removeRequest"></div> 
    <div title="some other button" class="abc"></div> 
</div> 

<table id="t2"></table> 

<div class="bulk_action"> 
    <div title="Remove requests" class="trash_iconset_grey_16px removeRequest"></div> 
    <div title="some other button" class="abc"></div> 
</div> 

JS код

jQuery('.removeRequest').live ('click', function(){ 
    var div_obj = jQuery(this).closest('div'); 
    //alert(jQuery(div_obj).attr('class')); //<-- this works 

    var tbl = jQuery(div_obj).prev('table:first'); // <-- This is not working 
    alert(jQuery(tbl).attr('id')); 
}); 

Кто-нибудь есть какие-либо советы о том, как решить эту проблему?

ответ

1

Идя к родителю кнопки, вы можете обратиться за ближайшим столом:

jQuery('.removeRequest').live('click', function(){ 
    var div_obj = $(this).parent(); 
    var tbl = div_obj.prev('table'); 
    alert(tbl.attr('id')); 
});​ 

http://jsfiddle.net/XNWsy/1/

+0

Работал как шарм! Спасибо mate :) – Steven

+0

Как я уже сказал в своем ответе, вам не нужно заключать 'div_obj' в' $() ', это уже объект jquery !!! См. [Обновленный jsFiddle] (http://jsfiddle.net/XNWsy/1/) как доказательство того, что он работает :) – bfavaretto

+0

Обновленный ответ, чтобы отразить это ... – zen

0

Вам не нужно создавать новый объект jQuery для div при поиске таблицы. Это уже объект jQuery. Я имею в виду, используйте:

var tbl = div_obj.closest('table'); 
alert(tbl.attr('id')); 
0

Вы можете просто использовать .prev, если ваша структура разметки же всегда,

DEMO

jQuery('.removeRequest').live ('click', function(){ 
    var div_obj = jQuery(this).closest('div'); 
    alert(jQuery(div_obj).attr('class')); //<-- this works 

    var tbl = jQuery(this).closest('.bulk_action').prev(); // <-- Will get you the table 
    alert(tbl.attr('id')); 
}); 

или если разметка может иметь некоторые элементы между DIV и затем используйте таблицу .closest('table'), как показано ниже,

DEMO

jQuery('.removeRequest').live ('click', function(){ 
    var div_obj = jQuery(this).closest('div'); 
    //alert(jQuery(div_obj).attr('class')); //<-- this works 

    var tbl = jQuery(this).closest('.bulk_action').prev('table'); // <-- Will get you the table 
    alert(jQuery(tbl).attr('id')); 
}); 

Примечание: Используйте .on, если вы используете JQuery версии 1.7 или использовать .delegate для более старых версий.

Использование .on (для JQuery v1.7)

jQuery(document).on('click', '.removeRequest', function(){ 

Использования .delegate (для старых версий)

jQuery(document).delegate ('.removeRequest', 'click', function(){ 

PS: заменить jQuery(document) с любым селектором обертки, который оборачивает в DIV и тому столы.

0

Если я вас правильно понимаю, это может работать:

jQuery('.removeRequest').live ('click', function(){ 
    var tbl = jQuery(this).closest("table"); 
    alert(jQuery(tbl).attr('id')); 
}); 
Смежные вопросы