2013-11-18 5 views
0

http://jsfiddle.net/wT3Ev/ Как получить текст, который находится в строке TH выбранного td?Выберите строку TH соответствующего TD

Да, я нашел некоторые связанные должности, но ничего, что делает трюк для меня.

Я пробовал:

$(document).on("click", "#sTab td,#pvTab td", function() { 
alert($('#sTab tr').find('th:nth-child(' + $(this).parent().index() + ')').innerHTML); 

alert($(this).parent()); 

var th = $(this).closest('table').find('th').eq(this.cellIndex); 

alert(th.innerHTML); 
} 
+2

* SyntaxError: отсутствует) после списка аргументов * –

+0

'предупреждение ($ (это) .closest ('тр') находим ('ю') текст());' HTTP:.//jsfiddle.net/T4tua/ –

+0

Это слишком сложная демонстрация. Вы хотите щелкнуть 'td' (* any *' td??) И извлечь текст из 'th' в начале щелкнутой строки? –

ответ

3

Я хотел бы предложить:

/* binds a click-handler to the 'tbody' element, 
    filters those clicks to only those that originate on a 'td' element: 
*/ 
$('tbody').on('click', 'td', function(){ 
    /* gets the siblings of the clicked 'td' element, filters those siblings 
     for 'th' elements, gets the first of those matching elements, 
     and then retrieves the text of that element, assigning it to the variable: 
    */ 
    var thText = $(this).siblings('th').first().text(); 
    console.log(thText); 
}); 

JS Fiddle demo.

Или, используя немного больше DOM (маленькое, крошечного увеличения эффективности):

// same as above: 
$('tbody').on('click', 'td', function(){ 
    /* using DOM (not jQuery), moving from the clicked 'td' element 
     to its parentNode ('tr'), retrieving the first of its children 
     (JavaScript is zero-indexed, the first child is at position '0'), 
     and retrieving its textContent (the text of the 'th'): 
    */ 
    var thText = this.parentNode.children[0].textContent; 
    console.log(thText); 
}); 

JS Fiddle demo.

Ссылки:

+0

Не возражаете ли вы объяснить код? – Faarbhurtz

+0

Несомненно, я добавлю пояснения к ответу (в комментариях к коду). –

+0

Сладкий, спасибо! он работает – Faarbhurtz

1

Это должно работать:

var index = $(this).index(); 
console.log($(this).parents("table").find("th:eq(" + index + ")").text()); 

Edit: строка заголовка: console.log($(this).closest("tr").find("th").text());

Fiddle: http://jsfiddle.net/wT3Ev/4/

+0

Нет, его показ столбца TH, а не строки TH – Faarbhurtz

+0

Просто увидел это, редактируя – tymeJV

1

Вы не были слишком далеко. Это работает с вашим примером:

$(document).on("click", "#sTab td,#pvTab td", function() { 
    var tdIndex = $(this).index(), 
     table = $(this).closest('table'), 
     headingIndex = tdIndex + 1, 
     thText = table.find('th:nth-child(' + headingIndex + ')').text(); 
    alert(thText); 
}); 
1
$(this).parent().find('th').html(); 

редактирование: объяснение - строка всегда родитель ячейки, нет необходимости искать индекс - просто посмотрите на заголовок в строке, в которой у вас есть клетка. ..

http://jsfiddle.net/qA6R9/

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