2013-09-29 3 views
0

У меня есть строки, которые динамически создаются, и я хочу добавить div в конце каждой строки. Я попробовал разные способы, чтобы это произошло. однажды я закончил добавление div к каждой строке, но предыдущие строки получили дополнительные divs каждый раз, когда была добавлена ​​строка. Я хочу, чтобы только одна строка имела 1 отменить div во все времена. (это будет похоже на кнопку отмены, чтобы пользователь мог удалить строку).Добавление div в конце динамически созданной строки

В этом коде я пытаюсь пройти через каждую строку с классом строки и проверить, имеет ли строка дочерний элемент с классом «отменить», а если нет, добавьте отмену div. Он работает в первый раз, но не в другое время.

$('.row').each(function(){ 
if($(".row").children(".cancel").length == 0){ 
    $("<div class = 'cancel'>test</div>").appendTo('.row') 
} 
}) 

Я пытался добавить DIV «отменить» в заявлении еще, когда я добавляю строки, как этот

if($(".table").html().length <= 0) 
{ 
    $('.table').append($("<table>").append(tableheader).append(tr)); 

}else{ 
    if($(".table").html().length > 0){ 
     $("table").append(tr).append("<div class = 'cancel'>test</div>") 

    } 

} 

но он не появлялся на всех

Я знаю, что я возможно, добавит еще один td в var tr, чтобы создать новый столбец с div, но мне интересно, почему мои усилия по его выполнению были неудачными. Он должен работать. Извините мое невежество.

здесь jsfiddle для иллюстрации. возможно, что-то не так с кодом где-то еще.

У меня есть другая проблема в коде, который, я думаю, вы могли бы мне помочь. Его общая сумма в общей колонке. формат выходит как 7,5 вместо 7,50, нормальные долларовые цифры. и когда im на жареной куриной котлетке и выберите qnty = 3, общая сумма составляет 38.849999999999994, я подумал, что в Fixed (2), и parseFloat исправит это, но они не сработали. очевидно, мне хотелось бы 38.85.

ответ

1

Я думаю, проблема в том, как вы обращаетесь к строкам таблицы, добавляя div.

$('.row').each(function(){ 
    if($(".row").children(".cancel").length == 0){ 
     $("<div class = 'cancel'>test</div>").appendTo('.row') 
    } 
}); 

Данный скрипт всегда ищет класса .row, а прилагая DIV. Поэтому, если у вас есть div, добавленный к любому из классов .row, если условие не выполнено.

Решение:

Чтобы устранить эту проблему, используйте $(this) для доступа к каждой строке в цикле.

$('.row').each(function(){ 
    if($(this).children(".cancel").length == 0){ 
     $("<div class = 'cancel'>test</div>").appendTo($(this)) 
    } 
}); 

Кроме того, чтобы исправить ваш второй вопрос о цене, изменить

$(".total",$row).html(parseFloat(qnty * price)); 

в

$(".total",$row).html(parseFloat(qnty * price).toFixed(2)); 

Проверьте обновленный Demo Fiddle.

+0

Он работает. Огромное спасибо. поэтому я должен указать это, чтобы выбрать строку, в которой я использовал метод .each для проверки каждой строки. если я просто использую $ ('. row'), это не обязательно означает, что он получает $ ('row'), который я сначала начал проверять с помощью .each(). Я бы хотел использовать $ ('. Row'), но мне пришлось привыкнуть использовать $ (this) в других подобных случаях. –

0
  1. вы можете сделать это а) console.log ($ (». Строка '). Длина) // посмотреть длину

  2. $ ("тест"). AppendTo ('. row ') //this.code должен «$ (« test »). appendTo ($ (this))«

    Я думаю, что я говорю выше, может быть полезно; попробуйте сами

1

попробовать это:

$('.row').each(function(idx, val){ 
    if($(val).children(".cancel").length == 0){ 
     $("<div class = 'cancel'>test</div>").appendTo(val); 
    } 
}); 
+0

Спасибо, что показали мне способ решить эту проблему. поэтому просто для уточнения val представляет строку элементов, и вы используете ее в условном выражении для ссылки на исходную выбранную строку, использующую .each(). У меня был $ (". Row") вместо val в условном выражении, и это было неверно, потому что $ ('. Row') не ссылалась на $ ('. Row'). Это предположения о corect. Если так, то я предполагаю, что $ ('. Row') в условных операторах, которые у меня были для моего решения, не имела в виду ничего, потому что ничего не происходило? –

+0

yup, фактически $ ('. Row'). Каждый выбирает все элементы, имеющие класс .row, а в функции вы можете получить доступ к фактическому объекту через параметры, которые в этом случае являются val. –

+0

и в вашем решении ваше условие if ($ (". Row"). Children (". Cancel"). Length == 0) {аннулирует добавление. –

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