2013-02-20 3 views
0

Мне нужно назначить числа ячейкам таблицы, которые увеличиваются от ячейки к ячейке. Я попробовал forloop, но у меня возникли проблемы с назначением увеличившегося счетчика заголовка ячейки после каждого цикла. У меня этот код -Изменить/увеличить заголовок td с циклом for - JQuery

$(function(){ 
var row = $('#seat_map tr:last td.freeSeat') 
for(i=0; i<row.length; i++){ 
     row.attr('title', i); 
    } 
}); 

Этот код только присваивает конечное значение I после того, как цикл завершен, все ячейки названия ... Вместо того, чтобы назначить „1, 2, 3“ и т.д. к заголовкам , Я должен добавить, что таблица динамически генерируется с помощью jquery. Извиняюсь за смутное название и описание - я старался изо всех сил!

Благодаря

+0

для ... еще ...? – Popnoodles

+0

wats еще делать in for цикл ..? –

ответ

1

Ну вы могли бы использовать .each() все равно

var row = $('#seat_map tr:last td.freeSeat'); 
$.each(row, function(index){ 
    $(this).attr('title', index+1); 
}); 

Но на самом деле, вы могли бы сделать это прямо из селектора.

$('#seat_map tr:last td.freeSeat').each(function(index) { 
    $(this).attr('title', index+1); 
}); 
+0

Работал отлично, спасибо! К сожалению, не хватает репутации. – user1769279

1

«Этот код присваивает только конечное значение I после того, как цикл завершен, к заголовкам всех ячеек»

Это потому, что на каждой итерации вы устанавливаете атрибут каждого соответствующего элемента. (row.attr('title',i) действует на каждого элемента в объекте row JQuery.)

Если вы используете JQuery вы найдете его легче использовать его .each() method вместо обычной for цикла:

$(function(){ 
    var rows = $('#seat_map tr:last td.freeSeat'); 
    rows.each(function(i) { 
     $(this).attr('title',i); 
    }); 
}); 

Если вы не используете это за что-то еще позже вы тогда не нужно rows переменного на все:

$(function(){ 
    $('#seat_map tr:last td.freeSeat').each(function(i) { 
     $(this).attr('title',i); 
    }); 
}); 

Но сделать это с for петли можно использовать eq() method, чтобы получить доступ к curret пункт:

$(function(){ 
    var row = $('#seat_map tr:last td.freeSeat') 
    for(i=0; i<row.length; i++){ 
     row.eq(i).attr('title', i); 
    } 
}); 

Любой из этих методов будет начинаться с i в 0, так что используйте i+1, если вы хотите, отображаемая начать нумерацию с 1.

+0

Мы отправили одинаковые ответы на несколько секунд друг от друга. +1 – Achrome

+0

Но вы оба пропустили важную часть вопроса ... – Popnoodles

+0

Не хватило репутации, но спасибо! – user1769279

0

Попробуйте это:

$(function(){ 
    var row = $(document).children('#seat_map tr:last').find('td.freeSeat'); 
    for(i=0; i<row.length; i++){ 
     row.attr('title', i); 
    } 
}); 

или это:

$(function(){ 
    var row = $('#seat_map tr:last td.freeSeat', this); 
    for(i=0; i<row.length; i++){ 
     row.attr('title', i); 
    } 
}); 

Как вы упомянули I should perhaps add that the table is dynamically generated using jquery

1

Использование .each() функция JQuery

Метод .each() предназначен для того, чтобы сделать конструкции циклов DOM краткими и менее подверженными ошибкам. Когда он называется, он выполняет итерацию над элементами DOM, которые являются частью объекта jQuery. Каждый раз, когда выполняется обратный вызов, он пропускает текущую итерацию цикла, начиная с 0.Что еще более важно, обратный вызов запускается в контексте текущего элемента DOM, поэтому ключевое слово this относится к элементу.

JQuery:

$('#seat_map tr:last td.freeSeat').each(function(index){ 
    $(this).attr('title', index+1) 
}) 

DEMO

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