JQuery ближайшее поведение в IE очень медленно - PullRequest
4 голосов
/ 30 сентября 2011

У меня есть таблица с 5000 строк.В каждой строке у меня есть элемент HTML.myElementList - это список этих элементов.Теперь мне нужно выбрать все tr этих элементов.Я использую следующий код.

myElementList.closest('tr');

Это прекрасно работает в FF.Но когда я запускаю то же самое в IE 8. Браузер зависает, и появляется всплывающее сообщение, которое предлагает остановить скрипт.

Любое предложение, почему я вижу это поведение или их, является любой альтернативой.

Редактировать :

Поведение остается тем же, когда я использую родителей ()

 myElementList.parents('tr');

Ответы [ 2 ]

3 голосов
/ 01 октября 2011

Чтобы получить то, что вы хотите довольно быстро (ближайший родительский элемент для каждого флажка), вы могли бы сделать что-то вроде этого:

$.fn.extend({
    closestByTagName: function(tagname) {
        var tag = tagname.toUpperCase(), i = this.length, node, found=[], trParents;
        while(i--) {
          node = this[i];
          while((node=node.parentNode) && node.nodeName != tag);
            if(node) {
              found[found.length] = node;
            }
        }
        return $(found);
    }

});

var result = $('input:checked').closestByTagName('tr');

Это не красиво, но я не могу придумать более быстрый путь. (он должен побить jQuery с большим отрывом)

1 голос
/ 30 сентября 2011

Попробуйте использовать селекторы parent (), child (), next (), prev (). Я не на 100% уверен в том, как именно jQuery обходит таблицу, чтобы найти tr, но 5000 строк - это очень много. Быть более конкретным сделало бы движок JS меньше работать.

http://api.jquery.com/category/traversing/

$('input:checked').parent('tr').each(function(i){....
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...