2015-02-21 2 views
0

Я хочу получить CSS-селектор набора элементов jQuery.Получить CSS-селектор всех совпадающих элементов в jQuery

По JQuery элементов устанавливается в данном случае я имею в виду JQuery набор, созданный на основе какой-то селектор CSS и продолженную некоторые функции JQuery как .children и т.д., как $(".basic-selector").children();

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

$("div.someclaass").selector //works ok - gives div.someclass 

Но я также должен получить селектор CSS для более сложных сценариев (и здесь Jquery не вернувшихся действительный селектор CSS)

$("div.someclass").children("p").selector //schould give div.someclass > p 

И для более сценариев, как комплекс,

$("ul, ol").children("li").selector //should give ul > li, ol >li 

Возможно ли это?

Требования:

  • Он должен быть действительным селектор CSS

  • Я не могу изменить код JS для создания множества

  • Он должен работать для всех такого рода функций JQuery, которые могут иметь css селектор - как children, find, next, nextAll, .filter (с css param) и т. Д.

Есть некоторые функции, такие как .prev или .parent, которые не будут иметь селектор CSS - Я знаю об этом.

Зачем мне это нужно? - У меня есть plugin. Требуется набор jQuery, который был создан на основе селектора и выполняет некоторую функцию для этих элементов. Но также - функция должна быть выполнена в будущем для новых элементов, добавленных позже, что будет соответствовать набору, если они будут существовать во время выполнения кода создания кода. Для хорошего понимания, пожалуйста, проверьте страницу плагина.

+0

Ваш вопрос не очень ясен. Что вы подразумеваете под набором элементов jQuery? – Zaqx

+1

Просто интересно, зачем вам это нужно? –

+0

Как только вы начнете методы цепочки, нет встроенного способа сделать это. Каким будет ваш случай использования? Вы можете скомпилировать селектор, следуя 'parent()' back up the tree – charlietfl

ответ

1

Свойство .selector является deprecated и может использоваться только в том случае, если набор элементов jQuery был создан путем прямой передачи селекторной строки. Как вы видели, .selector останавливает представление действительного селектора в целом, как только вы начинаете методы обхода цепочки или фильтрации из исходного набора. Судя по тем значениям, которые .selector может показаться, что это просто не предназначено ни для чего, кроме внутреннего использования.

Но настоящая проблема заключается в том, что не все элементы набора могут быть представлены с помощью допустимого селектора CSS (не перечислив все возможные перестановки :nth-child()), не последним из которых является то, что многие из нестандартных селекторов jQuery не имеют стандартные эквиваленты. Даже если вы ограничитесь стандартными селекторами и методами обхода, которые могут быть представлены с помощью селектора, если набор элементов оригинала был получен с помощью некоторых других средств или если он был получен обычным образом и затем подделан, вы не сможете чтобы обнаружить это, даже не используя .selector, который, как я упоминал, все равно не рекомендуется.

Если у вас действительно нужна строка селектора, соответствующая вашему выбору, самый простой способ - просто написать его вручную и сохранить в отдельной переменной.

+0

@Adam: если вы берете совет на странице справки '.selector', связанной с этим ответом, вы можете переписать API своего плагина на что-то вроде' $ (document) .initialize ("div.foo", initFn); 'и вы могли бы даже заставить его работать с функцией фильтрации, а не с селектором (но в этом случае остерегайтесь проблем с производительностью). –

Смежные вопросы