2015-03-04 2 views
1

Я проверил несколько ответов на SO, и я думаю, что мой синтаксис верен, но что-то не работает правильно.Правильный способ добавления переменных и селекторов к функции not - jquery

Я пытаюсь создать массив селекторов jquery, смешанных с переменными, и сохранить их в функции not().

У меня есть это fiddle, чтобы продемонстрировать.

Вторая строка функции не работает:

var trigger = $('mainNav li:eq(0) a'); 
var headerLinks = $('#header a').not('.control a', + trigger); 

Моя первая мысль была, что #header a имеет больше преимущество над .control a в терминах CSS. Но смена классов и идентификаторов не работает.

Точно так же у меня есть более простой вар дальше в моем коде:

var content = $('.content'); 
var added = $('.extraList', + content); 

В консоли added возвращает только селектор extraList.

1 Не работает ли функция not с другими селекторами jquery? Я надеялся увидеть массив всех элементов, выбранных и/или отфильтрованных в консоли

2 Есть ли способ хранения варов и селекторов в стандартном массиве и вызов? Я не знаю, как это будет выглядеть именно так, как JQuery нужно будет интерпретировать это, но что-то вроде этого:

var arr = ['.control a', headerLinks, content, '.post']; 

Я понимаю, что это смешивание типов, но я не знаю, как передать как JQuery переменные и селекторы в тот же массив, если это возможно.

ответ

0

Благодаря @Satpal. Ваш ответ определенно помог мне, но вот что я сделал.

Храните массив селекторов jquery для последующего исключения из функции, я могу продолжать добавлять или редактировать эту переменную.(Я думаю, что это аккуратнее, как она отделяется код немного больше, и она обходит родителя/проблемы ребенка):

var exclude = $('#mainNav li:eq(0) a, .control a, .social-links a'); 

Создайте еще один набор ссылок для включения в функции:

var headerLinks = $('#header a'); 
var contentLinks = $('.post a'); 

Объединить селекторы, которые будут использоваться для запуска функции, а также добавить исключенные селекторы:

var merge = $.merge(headerLinks, contentLinks).not(exclude); 

теперь функция щелчка:

merge.on('click',function(){}); 

Следует стрелять по ссылкам, которые я хочу, а не тем, которые у меня нет.

Я все еще хотел бы знать, как хранить массив селекторов и переменных jquery в стандартном массиве javascript.

Обновлено скрипка: http://jsfiddle.net/lharby/gk7bmzqh/1/

1

Для кода var headerLinks = $('#header a').not('.control a', + trigger);

Вы можете просто использовать как Chaing

var headerLinks = $('#header a').not('.control a').not(trigger); 

ИЛИ

var trigger = $('.control a, #mainNav li:eq(0) a'); //I am using here #mainNav 
var headerLinks = $('#header a').not(trigger); 

Для var added = $('.extraList', + content);

Вы можете использовать .add()

Создать новый объект JQuery с элементами, добавленных в наборе соответствующих элементов.

var added = $('.extraList').add(content); 
+0

Спасибо @Satpal Я попытался сцепление с не функциями, но это, похоже, не работает. См. Обновленную скрипту: http://jsfiddle.net/lharby/js5okk49/4/ – lharby

+0

@lharby, '.control' не является дочерним элементом' header', поэтому '$ ('# header a'). Not ('. Control a ') 'будет по-прежнему ссылаться на' $ (' # header a ') '. что вы пытаетесь достичь? – Satpal

+0

Я пытаюсь заполнить список ссылок, которые не должны запускать определенную функцию. Другие ссылки, которые не указаны, должны вызывать функцию. – lharby

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