2012-01-12 31 views
15
Ben hücreyi ( td) altında hemen erişmek için jQuery nasıl kullanabilirim

geleneksel ızgara düzeni html belirli bir hücre table (yani tüm hücreler tam olarak bir satır yayılan hangi bir ve sütun)?jQuery: Bir sonraki tablo hücresini alın dikey

Onların hemen kardeş çünkü şu tıklanan hücrenin hemen sağındaki hücreye nextCell set olacağını biliyorum, ama hemen tıkladım hücrenin altında hücreyi almak çalışıyorum:

$('td').click(function() { 
    var nextCell = $(this).next('td'); 
}); 

Tercihen sınıfları veya kimlikleri kullanmadan yapmak istiyorum.

cevap

33

bu deneyin:

$("td").click(function(){ 
    // cache $(this); 
    var $this = $(this); 

    // First, get the index of the td. 
    var cellIndex = $this.index(); 

    // next, get the cell in the next row that has 
    // the same index. 
    $this.closest('tr').next().children().eq(cellIndex).doSomething(); 
}); 
+1

Çocuklar için 'td' argümanına ihtiyacınız yoktur ve eğer OP, tablodaki ['th' elements] (http://jsfiddle.net/nX7JP/) içeriyorsa onu atabilir. – Dennis

0

Her tablo satırında eşit sayıda hücre var mı? Eğer öyleyse, söz konusu hücrenin "sayısını" alabilir, ardından next('tr')'daki ilgili hücreyi seçebilirsiniz.

1

ne dersiniz:

$('td').click(function() { 
    var nextCell = $(this).parent().next().find("td:nth-child(whatever)"); 
}); 
2
$('td').click(function() { 
    var index = $(this).prevAll().length 
    var cellBelow = $(this).parent().next('tr').children('td:nth-child(' + (index + 1) + ')') 
}); 

index geçerli satırda hücrenin 0 tabanlı indeksi (prevAll bu bir önce tüm hücreleri bulur olduğunu).

Ardından, sonraki satırda, nth-child td dizinini + 1 dizininde (nth-child 1, dolayısıyla + 1 başlar) buluruz. Eğer seçicileri kullanmadan bunu yapmak istiyorsan

+1

Neden $ (this) .prevAll(). Length' over '$ this.index()'? –

+0

@JustinSatyr Şimdiye kadar 'index' hakkında bir şey bilmiyordum. :) – mbillard

+1

.prevAll(). Length kullanmayı hiç düşünmedim. haha. Aynı sonuç, hangisinin daha hızlı olduğu hakkında hiçbir fikrim yok. –

1

, yapabileceğiniz:

function getNextCellVertically(htmlCell){ 
     //find position of this cell.. 
     var $row = $(htmlCell).parent(); 
     var cellIndex = $.inArray(htmlCell, $row[0].cells); 
     var table = $row.parent()[0]; 
     var rowIndex = $.inArray($row[0], table.rows); 

     //get the next cell vertically.. 
     return (rowIndex < table.rows.length-1) ? 
       table.rows[rowIndex+1].cells[cellIndex] : undefined; 
    } 

    $('td').click(function() { 
     var nextCell = getNextCellVertically(htmlCell); 
     //... 
    }); 

değil o verimi burada önemli olan ama böyle yapmak çok daha hızlı çalışır - testlerinde öyleydi 100.000 tekrarlamalar üzerinde Seçici tabanlı yaklaşımlardan 2-5 kat daha hızlı.

İlgili konular