Могу ли я предложить что-то подобное?
$(function() {
$('#show').click(function() {
var i;
for (i = 0; i < titles.length; i++)
{
ToggleHeadVisibility('SHOW', titles[i]);
}
});
$('#hide').click(function() {
var i;
for (i = 0; i < titles.length; i++)
{
ToggleHeadVisibility('HIDE', titles[i]);
}
});
});
var titles = ['one', 'three', 'five'];
function ToggleHeadVisibility(showHide, title)
{
var x = $('th[title=' + title + ']').index();
var selectString = 'th:nth-child(' + (x + 1) + '), td:nth-child(' + (x + 1) + ')';
var $set = $(selectString);
if (showHide === "SHOW")
{
$set.show();
}
else if (showHide === "HIDE")
{
$set.hide();
}
}
Я думаю, что на самом деле проблема заключается в вашей петле. Вы перебираете все th в таблице. Если вы хотите найти только конкретные, почему бы не выполнить итерацию по тем, которые вы хотите найти?
Итак, что здесь происходит, именно это. При нажатии кнопки «показать» (или «скрыть») мы перебираем массив заголовков, вызывая ToggleHeadVisibility.
В этой функции мы получаем индекс первого элемента с заданным заголовком, а затем показываем или скрываем узлы nth-child (x).
Я запустил его в таблице с 6 столбцами, показывающими и скрывающими по 3, и более 1000 строк. Это довольно быстро, для того, что он делает.
Обратите внимание, что если ваши заголовки s не являются уникальными, он найдет только первую в таблице.