代码之家  ›  专栏  ›  技术社区  ›  Bite code

设置上下文,使body的直接子级永远不会被jQuery选中

  •  0
  • Bite code  · 技术社区  · 15 年前

    我有以下HTML代码:

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

    在jquery1.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*是行不通的。

    3 回复  |  直到 15 年前
        1
  •  1
  •   Rafael    15 年前

    我不确定我是否理解这个问题,但试着用 .not() 在结果集上

    select = function(selector){return $(selector).not('#never-selected, #never-selected *')};
    
        2
  •  0
  •   KyleFarris    15 年前

    您可以编写自己的自定义选择器,使用任何数量的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)')
    

    不管怎样,编写自己的选择器似乎是您试图用脚本做的事情。祝你好运!

        3
  •  0
  •   gnarf    15 年前

    创建一个函数,用它传递的参数调用jQuery(),然后自动执行.filter()的操作,这样可能行得通吗?

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