2012-05-15 2 views
3

Можно создать дубликат:
How to find an element within an element

Im работает цикл, чтобы пройти через каждую строку таблицы. Я хочу получить доступ к элементам внутри каждой строки таблицы. Как мне это сделать?

Таблица:

<table> 
<tr> <td class="a">x</td> <td class="b">x</td> <td class="c">x</td> </tr> 
<tr> <td class="a">x</td> <td class="b">x</td> <td class="c">x</td> </tr> 
<tr> <td class="a">x</td> <td class="b">x</td> <td class="c">x</td> </tr> 
<tr> <td class="a">x</td> <td class="b">x</td> <td class="c">x</td> </tr> 
</table> 

код не работает:

$("tr").each(function(index) { 

    // get class a text 
    $(this + " td.a").text(); 

    // get class b text 
    $(this + " td.b").text(); 

    // get class c text 
    $(this + " td.c").text(); 

}); 
+3

Прочитайте API Docs. http://api.jquery.com/category/traversing –

+0

Кроме того, API jQuery содержит всю необходимую информацию. Возьмите час или два, чтобы пройти через это, это стоит того. –

ответ

8

Вы можете использовать children метод:

$("tr").each(function(index) { 

    // get class a text 
    var text1 = $(this).children("td.a").text(); 

    // get class b text 
    var text2 = $(this).children("td.b").text(); 

    // get class c text 
    var text2 = $(this).children("td.c").text(); 

}); 
+0

Я пробовал это перед публикацией и не работал. Но теперь это так! СПАСИБО. – supercoolville

+0

Добро пожаловать :) Будьте внимательны! – VisioN

3

Если вы имели доступ к его "нормально" (т. е. не w с jQuery), вы можете просто получить свойство cells.

var trs = document.getElementsByTagName('tr'), l = trs.length, i, tds; 
for(i=0; i<l; i++) { 
    tds = trs[i].cells; 
    // do stuff with tds 
] 
6

Второй параметр функции JQuery является контекст:

$("td.a", this).text(); 

Найдет все td.a потомков, которые попадают в this.

0
$("tr").each(function() { 
    var $this = $(this), 
     aText = $this.find('.a').text(), 
     bText = $this.find('.b').text(), 
     cText = $this.find('.c').text(); 
}); 
3

Если вам нужно вызвать $(this) несколько раз, вы должны назначить его на локальную переменную для увеличения производительности. Смотрите эту должность для получения дополнительной информации:

$this vs $(this) in jQuery

Наконец, вы можете использовать .find() за то, что вы пытаетесь достичь:

$("tr").each(function(index) { 

    var $this = $(this); 

    // get class a text 
    $this.find("td.a").text(); 

    // get class b text 
    $this.find("td.b").text(); 

    // get class c text 
    $this.find("td.c").text(); 

}); 
1
$("tr").each(function(index) { 

    // get class a text 
    $("td.a", this).text(); 

    // get class b text 
    $("td.b", this).text(); 

    // get class c text 
    $("td.c", this).text(); 

}); 
+0

СПАСИБО Я не знал, что вы можете структурировать это так! – supercoolville

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