2015-08-26 4 views
2

У меня есть таблица с количеством записей, где один из столбцов имеет выпадающий список. Основываясь на значении в одном из столбцов, параметры/значения в элементе необходимо удалить. Я могу это сделать, но изменения применяются к первому набору записей, которые отображаются на экране. Остальные записи на других страницах таблицы не затрагиваются. Первоначально я использовал следующий синтаксис для доступа к данным таблицыПрименить изменения во всех скрытых строках в datatable

$('table tr').each(function(){...}); 

Поскольку приведенный выше код не извлечению скрытых строк, я использовал fnGetNodes(), чтобы получить доступ к всем строкам. Ниже приведен полный код доступа и изменения содержимого.

var rows=oTable.fnGetNodes(); 
for(var i=0;i<rows.length;i++){ 
    var index=5; 
    var grade=$(rows[i]).find('td').eq(index).text(); 
    var desc=$(rows[i]).find('td').eq(index+1).text(); 
    console.log('Grade - '+grade); 
    console.log('Desc - '+desc); 
    index=13; 
    var selID=$(rows[i]).find('td').eq(index).find('select').attr('id'); 
    if(grade.match('Used')){    
     $("select#"+selID).attr('disabled', true); 
     $("select#"+selID).css("background-color","#eeeeee"); 
    } 
    else if(desc.match('ALT$') || desc.match('MTM$')) 
    { 
     $("#"+selID+" option[value='Option one']").remove(); 
    } 
} 

Я могу напечатать идентификатор элемента select, но не смог его изменить. Он снова работает для первого набора записей, отображаемых на экране, а не для скрытых. Не могли бы вы сообщить мне, что мне не хватает?

+0

подход все неправильно. Существует гораздо больше под капотом плагина, чем просто html. Он кэширует данные и html внутри. Обновите данные, которые отображают выбор через данные api ... затем выполните перерисовать – charlietfl

+0

@charlietfl, я новичок в jQuery. Не могли бы вы рассказать мне, как использовать данные api? Я использую Struts, который загружает данные в datatable. – Anand

+0

загружает его как? как html, представленный на странице или json, передан плагину? – charlietfl

ответ

1

Измените код следующим образом:

// ... skipped ... 

var $select = $(rows[i]).find('td').eq(index).find('select'); 
if(grade.match('Used')){    
    $select 
     .attr('disabled', true) 
     .css("background-color","#eeeeee"); 
} 
else if(desc.match('ALT$') || desc.match('MTM$')) 
{ 
    $select.find("option[value='Option one']").remove(); 
} 

// ... skipped ... 
+2

Да - пример 1.9.4 -> http://jsfiddle.net/w9js3r0u/ – davidkonrad

+0

@ davidkonrad, спасибо за демонстрацию, добавленный в ответ. –

+0

@ Gyrocode.com, его не касается доступа к скрытым строкам, а изменения их поведения. Опять же, после изменения кода на ваше предложение, я вижу, что изменения не отражаются на скрытых строках. Тем не менее, он работает отлично для первого набора строк на первой странице. – Anand

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