2012-04-05 2 views
0

Я получаю индекс подряд, делая это:Эффективный способ поиска индекса строки?

row.parent().children("tr").index(row) 

Есть ли более эффективный способ найти индекс? У меня есть сотни строк, поэтому я убиваю свою производительность, поэтому я должен выбрать все строки, чтобы найти индекс.

+0

Возможный дубликат http://stackoverflow.com/questions/788225/table-row-and-column-number-in-jquery – Dhiraj

ответ

5

Как насчет row.prevAll().length?

+0

+1 для использования чистого Javascript в сценарии проблем производительности! Я смог использовать это: row [0] .rowIndex – TruMan1

0
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" 
    "http://www.w3.org/TR/html4/strict.dtd"> 

<html lang="en"> 
<head> 
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> 
    <script type="text/javascript" charset="utf-8" src="https://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script> 
    <script type="text/javascript" charset="utf-8"> 
    $(document).ready(function() { 
     console.log($("tr").index($("#my"))); 
    }) 
    </script> 
</head> 
<body> 
    <table border="0" cellspacing="5" cellpadding="5" id="tbl"> 
     <tr><th>Header</th></tr> 
     <tr><td>Data</td></tr> 
     <tr id="my"><th>Header</th></tr> 
     <tr><th>Header</th></tr> 
     <tr><td>Data</td></tr> 
    </table> 
</body> 
</html> 

Надеюсь, что это поможет. Приветствия.

+0

Нет -1, но вы можете просто получить путь с '$ (" # my "). index();', нет необходимости переопределять –

0

Идентификатор атрибута - самый быстрый способ разбора любого html. Вы можете предоставить все свои строки Id.

Хотя индексный метод будет определять индекс среди элементов братьев и сестер, которые могли бы быть быстрее

row.parent("tr").index(); 

см Этот пример http://jsfiddle.net/shNrS/

0

Если вы получаете ссылку на строку как-то (щелкните обработчик и т. Д.), Чем нет дополнительных накладных расходов при поиске этого элемента, просто .index() это и прибыль (хотя обратите внимание на несколько tbody элементов, которые действительны, но будут добавлены сложность вашего скрипта)

Если вы индексируете всеtr элементов во время выполнения, можете также кэшировать его в данных jquery для будущего использования!

0

Самый быстрый путь здесь, вероятно, используя обычный JavaScript:

function getRowIndex(elem) { 
    var index = 0; 
    while (elem = elem.previousSibling) { 
     if (elem.tagName == "TR") { 
      ++index; 
     } 
    } 
    return(index); 
}  

Работа демо: http://jsfiddle.net/jfriend00/y4anN/

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

Вы бы предварительно нумеровать все строки с пользовательским атрибутом, как это:

function numberRows(table) { 
    var rows = table.getElementsByTagName("tr"); 
    for (var i = 0; i < rows.length; i++) { 
     rows[i].dataIndex = i; 
    } 
} 

А, то вы можете просто получить номер индекса из любого ряда, как это:

row.dataIndex 

Рабочая демонстрация: http://jsfiddle.net/jfriend00/CR2Wk/

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