Кэширование сложного селектора jquery на основе родителя и типа - PullRequest
0 голосов
/ 03 декабря 2009

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

Вот пример HTML, довольно упрощенный

<div id="Container">
    <div>
        <div>
            <input type="text" id="something">
        </div>
        <input type="text" id="other">
    </div>
</div>

Теперь мой JQuery ...

// select all input text boxes inside the div with ID "Container"
var allInputText = $("#Container input:text");

// the inner workings of these have been removed...
allInputText.change().bind();

// Now I have 10+ class checks where I run a function on them...
$(".numeric").numeric();
// ...
$(".etc").etc();

Цель состоит в том, чтобы увеличить скорость тех проверок 10+ классов. Все они являются одинаковыми текстовыми полями в div «Контейнер», только с указанием разных классов. Это работает, если я делаю это:

var myContainer = document.getElementById("Container");
$(".numeric", myContainer).numeric();

Но это не сработает, если я сделаю это:

$(".numeric", allInputText);

В идеале я хотел бы использовать «allInputText», потому что на самом деле я ищу только «.numeric» классы во входных текстовых полях, которые находятся в элементе контейнера. Это было кэшировано прямо выше для выполнения change () и bind (), но теперь я хочу сделать больше с ними, за исключением разных вещей для разных классов. Любые идеи, как добиться этого с максимальной производительностью кэширования?

1 Ответ

2 голосов
/ 03 декабря 2009

Поскольку у вас есть набор элементов, вам нужно отфильтровать набор, а затем найти в наборе, что и делал ваш код.

Попробуйте allInputText.filter(".numeric")

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