2012-09-20 11 views
5

Mam następującą klasę, która wybiera zawartość komórek td.lineitemtotal i używa jej w funkcji getTotal, aby uzyskać łączną liczbę komórek. Ale nie chcę, aby funkcja używała linii, które są w tr.line_item_row z style = "display: none;" atrybut.jQuery. Wybierz wszystkie elementy z klasą, ale bez stylu = "display: none;" atrybut

$(document).ready(function() { 
    var line = $('.item'); 
    // so the line totals are calculated on page load 
    getLineItemTotals(line); 

    var line_totals = $('.lineitemtotal'); 
    getTotal(line_totals); // So the total is calculated on page load. 
}); 

// get invoce grand total 
function getTotal(lines) { 
    var total = 0; 
    $.each(lines, function(){ 
    total += parseFloat($(this).html()); 
    }); 
    $('#total-price').html('$' + total.toFixed(2)); 
} 

Odpowiedz

10

Chcesz tego?

$('.lineitemtotal:visible'); 

Ten zestaw zawiera niewidoczne elementy o klasie lineitemtotal.

+0

Tak! zabrał mnie 5 sekund do qoogle, wyszukaj, znajdź :) Zdecydowanie warto poświęcić czas na pisanie tego komentarza. – Qwerty

2

Na selektora to selektor :visible:

$('.lineitemtotal:visible'); 
4
var line_totals = $('.lineitemtotal:not([style*="display:none"])'); 
+0

'+ 1' właśnie miałem odpowiedzieć :) – RASG

+1

Co jeśli element ma inne style w jego atrybutach? Dlaczego nie używać selektora ": visible"? – undefined

+0

@ Nieokreślony dobry punkt na twoim pierwszym zdaniu. Zakładałem, że to jedyny styl. O ile nie używałem ': visible', zrobiłem to, ponieważ visible również bierze pod uwagę' widoczność: ukryta', a OP nie prosił o to. –

2

Jeśli wiesz na pewno, że atrybut będzie zawsze style="display:none;" można użyć selektora atrybutu.

Zamiast tego:

var line = $('.item'); 

Spróbuj tego:

var line = $('.item[style!="display:none;"]'); 

użyciu [attribute="value"] szuka elementów, które mają attribute o wartości value, dodając ! przed = patrzy na rzeczy, które nie pasują .

Powiązane problemy