JQuery делает какой-либо вид кэширования “селекторов”?

58
задан BoltClock 20 July 2012 в 18:33
поделиться

4 ответа

jQuery не делает, но существует возможность присвоения переменным в рамках Вашего выражения, и затем используйте многократное использование тех в последующих выражениях. Так, кэшируйте-ifying свой пример...

if ((cached = $("#navbar .heading")).text() > "") {
  cached.hide();
}

Оборотная сторона - он, делает код небольшим fuglier и трудный к grok.

16
ответ дан Peter Olson 24 November 2019 в 18:56
поделиться

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

, Например:

$('#someid .someclass').show();
$('#someid').append('<div class="someclass">New!</div>');
$('#someid .someclass').hide();

В этом примере, недавно добавленный элемент не был бы скрыт, если бы было какое-либо кэширование запроса то - это скрыло бы только элементы, которые были показаны ранее.

14
ответ дан JoeBloggs 24 November 2019 в 18:56
поделиться

Я не думаю, что это делает (хотя я не испытываю желание прочитывать три с половиной тысячи строк JavaScript в данный момент для обнаружения наверняка).

Однако тому, что Вы делаете, не нужны несколько селекторов - это должно работать:

$("#navbar .heading:not(:empty)").hide();
9
ответ дан Peter Boughton 24 November 2019 в 18:56
поделиться

я не полагаю, что jQuery делает любое кэширование селекторов, вместо этого полагаясь xpath/javascript внизу для обработки этого. это сказанное, существует много оптимизации, которую можно использовать в селекторах. вот несколько статей, которые касаются некоторых основ:

4
ответ дан rymo 24 November 2019 в 18:56
поделиться
Другие вопросы по тегам:

Похожие вопросы: