2010-10-06 3 views
1

Как я могу получить цель от с RowSpan тд = 4Jquery: Получить следующий элемент из элемента

Не уверен, что о:

$("#fromTd").parent("tr").next().eq($("#fromTd").attr("rowspan")-1) 


<table> 
    <tr>...</tr> 
    <tr>...</tr> 
    <tr><td id="fromTd" rowspan="4"></td></tr> 
    <tr>...</tr> 
    <tr>...</tr> 
    <tr>...</tr> 
    <tr>...</tr> -> target (can be aleatory position..) 
</table> 
+3

Можете ли вы перефразировать? Этот код не имеет смысла ... можете ли вы сделать свою цель более ясной? – mway

+0

@mway, я думаю, он хочет переместить * на * или нацелиться на произвольный элемент брата, учитывая начальную позицию. –

+0

Вы нажимаете кнопку 'tr' или' td'? '.next()' будет выбирать следующий элемент sibling. –

ответ

1

Поправьте меня, если я ошибаюсь, но это звучит как то, что вы хотите, чтобы получить следующий <tr> после X строк, где X является RowSpan данного <td> - 1. другими словами, вы хотите следующий ряд, в который <td> НЕ будет распространяться.

Если это так, то это следует сделать трюк:

var eq = $("#fromTd").attr("rowspan") - 1; 
var row = $("#fromTd").parent("tr").nextAll(':eq(' + eq + ')'); 

Вот демо: http://jsfiddle.net/wLPA9/

+1

Как раз в качестве предпочтения, но я считаю, что это немного читаемо: '$ (" # fromTd "). Parent (" tr "). NextAll(). Eq (eq);' –

+0

It определенно более читабельна :) Я не уверен, что он предлагает какие-либо ощутимые преимущества, но я собирался использовать меньшее количество селекторов. Как вы сказали, это только вопрос предпочтения. – Ender

+0

': eq (n)' выполняется как '.eq (n)' в новейшей версии jQuery (или будет в версии 1.4.2) [согласно Джону Ресигу] (http://github.com/jquery/ JQuery/фиксация/f1f6bc3ec43d86f5b2a0c2b8bf711a2d35930717 # commitcomment-157856). Таким образом, вы можете также сохранить jQuery шаг и избегать конкатенации строк и '': eq ("+ n +") '' с помощью '.eq (n)'. –

1

Если вы пытаетесь сделать то, что линия выглядит как это делается, - выбирая строку после окончания текущей ячейки ячейки rowspan - вам просто понадобится nextAll() вместо next(), который только когда-либо возвращает ближайший следующий элемент.

var td= $('#fromTd'); 
var nextr= td.parent().nextAll().eq(td.attr('rowspan')-1); 

В качестве альтернативы, если у вас есть много следующих строк, и вы не хотите, чтобы выбрать их все, чтобы выбрать один из одного, вы могли бы сделать его немного более эффективно с помощью стандартного DOM rows и rowIndex свойства:

var nextr= td.closest('table')[0].rows[td[0].parentNode.rowIndex+td[0].rowSpan]; 
Смежные вопросы