Установите контекст, чтобы прямые потомки тела никогда не выбирались с помощью jQuery - PullRequest
0 голосов
/ 11 мая 2009

У меня есть следующий HTML-код:

<html>
  <head>
  </head>
  <body>
      <div id="never-selected">
      </div>
  </body>
</html>

В JQuery 1.3.2 я хотел бы создать оболочку вокруг $ (), которая позволит вам выбрать любой элемент с любой комбинацией, кроме div #, никогда не выбранный и его содержимое.

Я пытаюсь сделать это так:

_context = false;    
getContext = function() {
    if (_context === false) {
        _gui_dom = jQuery("fuzzy magic selector");
     }
    return _gui_dom;
};


// return a jQuery object filtered to aim the content of the tartiflet GUI only
select = function(selector) {
  return jQuery(selector, getContext());  
};

Но я не могу найти правильную формулу для применения «нечеткого волшебного селектора»; -)

Мой лучший выстрел - jQuery("head *, body *:not(#never-selected, #never-selected *)"), но недостаток в том, что вы не можете выбрать голову или тело, и это очень раздражает. Использование html * doest work.

Ответы [ 3 ]

1 голос
/ 11 мая 2009

Я не уверен, что понял проблему, но попробуйте использовать .not () в наборе результатов

select = function(selector){return $(selector).not('#never-selected, #never-selected *')};
0 голосов
/ 11 мая 2009

Возможно ли создать функцию, которая вызывает jQuery () с аргументами, которые она передает, а затем автоматически .filter () - это может работать?

function select() {
  var jquery = jQuery.apply(args);
  return jquery.filter(":not(#never-selected, #never-selected *");
}

Не уверен, что работает - это было закодировано в воздухе.

0 голосов
/ 11 мая 2009

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

Я не могу придумать, как добиться того, чего вы просите, но вы можете сделать что-то вроде этого:

jQuery.extend(jQuery.expr[':'],{
    everything_but: function(el,sel) {
        var everything = jQuery(el).clone();
        everything.find(sel).remove();
        return everything;
    }
});

Я точно не могу сказать, что моя реализация будет работать, но она может дать вам представление о том, как вы можете реализовать свой собственный селектор для достижения того, чего вы хотите.

Может использоваться как обычно. Примерно так:

var select = $('*:everything_but(#never-selected)')

В любом случае, написание собственного селектора - это то, что вы пытаетесь делать со своими скриптами. Удачи!

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