2015-08-09 3 views
0

Может ли кто-нибудь сказать мне, есть ли какой-нибудь «простой способ» получить набор элементов в jQuery? У меня есть следующий код ...Исключить элементы из объекта jQuery

var parent = $('.parent-box'), 
    inner = parent.find('.inner-box'); 

parent = parent - inner; // pseudocode - I want all elements except these in "inner" 

... и я хотел бы исключить «внутренний» из «родителя». filter() или not() не работают для меня в этом случае.

Благодаря

EDIT

Хорошо, возможно, другими словами :). Я написал простой «гармошку» сценарий:

http://jsfiddle.net/e2a6tr2f/1/

Как вы можете видеть, один аккордеон (внутренняя коробка) находится внутри другого аккордеона (родитель-бокс), который вызывает, что, когда «Аккорд-BTN» нажат внутри «внутренний ящик», все .accord-block (s) сбой. Я хотел бы выделить .accord-btn (s) и .accord-block (s) из «inner-box», поэтому они сворачиваются/расширяются только во «внутреннем ящике». Так я думал, что я мог бы написать что-н, как это:

accordions.each(function() { 
    var this_accordion = $(this), 
     inner = this_accordion.find('.inner-box'); 

     if(inner.length > 0) { 
      this_accordion = this_accordion - inner; // complement set 
     } 

    var headers = this_accordion.find('.accord-btn'), 
     blocks = this_accordion.find('.accord-block'); 

    headers.each(function() { 
     // 
    }); 
});} 

... и исключить «внутреннее» гармошку кликов события из «основной» гармошки.

+1

Мы должны видеть ваш HTML, чтобы помочь вам, хотя это звучит, как вам нужно метод 'not()'; http://api.jquery.com/not –

+0

Что вы хотите сделать с этим выбором? Вам нужен его контент или что-то еще? – skobaljic

+1

Вам нужны все элементы '.parent-box', кроме тех, у которых есть элемент предка' .inner-box'? Без вашего HTML трудно, если не невозможно, предложить решение, не догадываясь. Это делает вопрос неясным, слишком широким и вне темы (учитывая, что у вас недостаточно кода для репликации вашей проблемы). Пожалуйста, разместите достаточно образца HTML и четко покажите элементы, которые вы хотите найти, и те, которые у вас нет. Что касается включения кода, ознакомьтесь с инструкциями «[MCVE] (http://stackoverflow.com/help/mcve)». –

ответ

0

Этот подход соответствует вашим потребностям? jsFiddle

var childsExceptInnerBox = parent.children().not(".inner-box");

Update: jsFiddle

$(function() { 
    var accordions = $(".accordion"); 
    accordions.each(function() { 
     $(".accord-btn").on("click", function() { 
      $(".accord-btn").removeClass("expanded"); 
      var accordBtn = $(this); 
      accordBtn.addClass("expanded"); 
      if (!accordBtn.parents(".accordion").hasClass("inner-box")) { 
       $(".accord-block").stop().hide("fast"); 
      } 
      accordBtn.next(".accord-block").stop().show("fast"); 
     }); 
    }); 
}); 
+1

Это будет работать, только если '.inner-box' являются дочерними или' .parent-box'. – skobaljic

+0

@skobaljic 'inner = parent.find ('. Inner-box');' означает, что он хочет удалить ребенка. Или нет? –

+0

Нет, [метод поиска] (https://api.jquery.com/find/) будет искать любой элемент, а не только прямые дочерние элементы. – skobaljic

0

Вы можете использовать что-то вроде:

$("*").each(function() { 
    if($(this).hasClass('inner-box')){ 
      //do nothing 
    } 
    else{ 
      //elements you want 
     alert($(this).val()); 
    } 
});