Проблема с пользовательским фильтром jQuery: слишком много стеков элементов - PullRequest
0 голосов
/ 04 декабря 2010

Я пытаюсь реализовать селектор ": random", который выбирает случайный элемент из стека элементов.

Вот код: http://jsfiddle.net/nuSWF/

Проблема в том, что селектор иногда пытается выбрать элемент, который не существует (вне индекса). Итак, я подготовил демонстрационный код, который подчеркивает причину, но я не понимаю, почему. Кажется, это ошибка или что-то в этом роде.

П.С .: Я знаю, что мог бы выбрать случайный элемент другими методами, но на этот раз я должен реализовать это, также задаваясь вопросом, что происходит внутри.

1 Ответ

2 голосов
/ 04 декабря 2010

То, что вы видите с длиной стека - это нормально, это просто оценка селектора :random на всех <a> элементах в mydiv1 до > дочерний селектор , поэтому длина в этой точке равна 4.

Например, это даст ожидаемый результат:

var elements2 = $('#mydiv1>a').filter(':random');

Вы можете проверить это здесь .


Итак, в общем, ваш селектор действительно фильтрует случайные <a> элементы ... но эти могут или не могут быть далее отфильтрованы с помощью > дочернего селектора позже (если они ниже <span>, они фильтруются). Это верно для всех селекторов, если вы подумаете об этом ... любой выполняемый вами фильтр просто уменьшает набор элементов ... они могут быть дополнительно отфильтрованы позднее большим количеством селекторов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...