2016-06-15 3 views
0

У меня есть таблица без td/th-id/classes, и я прохожу через таблицу, чтобы получить данные из td: s. Если нет данных или данных: «-», то я устанавливаю класс CSS на этом td. Например:Сопоставьте два массива с условием

$('.simpletable td').each(function() { 
if($(this).text() === '-') 
    { 
    $(this).addClass("nodata"); 
    } 
}); 

Однако мне нужно сопоставить это 'td' с соответствующим 'th', чтобы установить тот же CSS-класс. Я получаю массив для th-массива с:

$('.simpletable th').each(function() 
{ 
    tableheaders.push($(this).text()); 
}); 

Кто-нибудь знает, как достичь этого? Или есть более простой способ сделать все это, если я начну с нуля?

Эта таблица имеет несколько строк 'th', поэтому я не могу сделать что-либо с колонками.

MARKUP HTML:

<table class="simpletable"> 
<thead> 
    <th>th1</th> 
    <th>th2</th> 
    <th>th3</th> 
</thead> 
<tbody> 
    <tr> 
     <td>data 1</td> 
     <td>-</td> 
     <td>data 3</td> 
    </tr> 
<thead> 
<th>th4</th> 
<th>th5</th> 
<th>th6</th> 
</thead> 
<tr> 
    <td>data 4 row 2</td> 
    <td>-</td> 
    <td>data 6 row 2</td> 
</tr> 
</tbody> 

+1

Там есть пара вещей, которые вы можете сделать. Во-первых, чтобы решить вашу * непосредственную * проблему, вы можете использовать функцию ': eq()' и 'index()'. 'var index = $ (this) .index();', то для вашего th '$ ('th: eq (' + index + ')'' выберет 'th', который будет тем же самым столбцом, что и' td Во-вторых, есть такая вещь, как селектор 'text': https://api.jquery.com/text-selector/ - вы можете использовать это так:' $ ('. Simpletable td [text = "- ']'). each (', которые будут выбирать только ячейки, которые имеют текст, равный '=' –

+0

@ ᾠῗᵲ ᄐ ᶌ. Вы должны восстановить свой ответ, он окажется правильным из-за разъяснения вопроса – Barmar

ответ

1

Вы должны захватить индекс td затем использовать .filter(), чтобы получить соответствующий th, которые имеют один и тот же индекс столбца

$('.simpletable td').each(function() { 
if($(this).text() === '-') 
    { 
    $(this).addClass("nodata"); 
    var ind = $(this).index(); // get td index relative to it's row 
    $('.simpletable th').filter(function(i,v){ 
     return $(v).index() == ind; // only return th with same column index as the td 
    }).addClass('nodata'); 
    } 
}); 
+1

Вы не уверены в 'i'? Разве это не вернет неправильное значение, если есть несколько строк, или это индекс в контексте данного' tr'? –

+0

ah yeah - вы правы. LOL не думал правильно –

+1

Это было сделано, трюк! Большое спасибо @ ᾠῗᵲ ᄐ ᶌ – Tess

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