Упростить JQuery Selector - PullRequest
       16

Упростить JQuery Selector

0 голосов
/ 30 июля 2009

У меня есть селектор "td > a.leftmenuitem:last, div > a.leftmenuitem:last", и я бы хотел немного его упростить. Я пробовал "* > a.leftmenuitem:last", "td, div > a.leftmenuitem:last" и "(td, div) > a.leftmenuitem:last", но ни один из них не работает так, как первый селектор. Разве такого рода вещи просто невозможны в синтаксисе селектора без создания отдельного селектора для каждого?

Ответы [ 6 ]

2 голосов
/ 30 июля 2009

Вы не можете упростить:

td > a.leftmenuitem:last, div > a.leftmenuitem:last

без каких-либо общих черт, поэтому вы можете выбрать все соответствующие элементы td и div одним выражением Например, если у них обоих был класс бла, вы могли бы сделать:

.blah > a.leftmenuitem:last

Но не используйте этот вид выражения, если вы можете его избежать. Селекторы класса медленные (по сравнению с селекторами идентификаторов и тегов).

Что-то не так с просто?

a.leftmenuitem:last

Кстати, вы уверены, :last является правильным выбором? Многие люди ошибочно используют его, принимая его за :last-child. :last будет соответствовать только одному элементу, последнему найденному элементу, найденному на странице.

1 голос
/ 30 июля 2009

Что больше, иногда быстрее. Когда вы используете * вместо td , ваш запрос значительно медленнее.

0 голосов
/ 30 июля 2009

Используемый вами селектор

Parent > Child 

соответствует всем дочерним элементам, указанным Child элементов, указанным Parent. Если в других частях страницы вы не используете элементы <a>, которые не являются потомками элементов <div> и <td>, почему бы не использовать

$('a.leftmenuitem:last')

Я что-то упустил?

0 голосов
/ 30 июля 2009

Может я просто запутался, но если

* > a.leftmenuitem:last

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

a.leftmenuitem:last

вместо

0 голосов
/ 30 июля 2009

Ваш селектор достаточно прост. Если вы хотите упростить это, вы можете сделать что-то вроде:

$('a.leftmenuitem:last').parent().doWhateverYouWereGoingToDo();

Однако я сомневаюсь, что это приведет к ускорению выполнения.

0 голосов
/ 30 июля 2009

Я не думаю, что вы можете упростить это. Вместо этого я бы предпочел дать интересующие вас ссылки в уникальном классе, чтобы вы могли просто сделать "a.<my-unique-class>:last". Таким образом, jquery может просто сканировать все соответствующие теги <a>, не беспокоясь о том, что их родительский элемент является элементом <td>.

...