2011-02-03 2 views
2

есть ли возможность выбрать элемент, но без одного из элементов, вложенных внутри, если известны идентификаторы обоих элементов?JQuery - выбрать весь элемент, кроме одного определенного элемента, вложенного внутри

как:

<div id="outerdiv"> 
    <div> 
     <div id="innerdiv1"> </div> 
     <div id="innerdiv2"> </div> 
    </div> 
</div> 

я хочу сделать выбор, который будет возвращать outerdiv, но без innerdiv2 так:

<div id="outerdiv"> 
    <div> 
     <div id="innerdiv1"> </div> 
    </div> 
</div> 

есть заявление как $ ('# outerdiv'). не ('# innerdiv2') или что-то, что могло бы сделать трюк? я могу решить это с помощью клона() + удалить(), но им просто блуждающих есть шанс сделать это так ..

благодаря

+1

Для чего вы пытаетесь это сделать? –

+0

Извините, пропустил ваш комментарий. Я пытаюсь сериализовать форму, используя $ ('form'). SerializeArray(), но хочу исключить входы из таблицы, которая находится внутри элемента формы. – frenzy

ответ

5

Здесь вы,

$('#outerdiv div:not(#innerdiv2)') 

с внешний div включил:

$('#outerdiv div:not(#innerdiv2),#outerdiv') 

Это действительно допустимый селектор CSS3, он также работает в jQuery.


Чтобы ответить на ваш комментарий я сделал небольшой тест в браузерах консоли:

a = $('<div id="a"><div id="wrap"><div id="one"></div><div id="two"></div></div>') 
a.find('div:not(#two)').addClass('a') 

Result: 

<div id=​"wrap" class=​"a">​ 
<div id=​"one" class=​"a">​</div>​ 
<div id=​"two">​</div>​ 
</div>​ 

html() В метод выводит содержимое HTML первого совпавшего элемента выбранного пакета. Ваш выбранный стек выглядит примерно так: [#outerdiv, div, # innerdiv1]. Итак, html() покажет html для #outerdiv. Если вам нужно сгенерировать HTML без #innerdiv2, то вам необходимо отсоединить его:

$('#innerdiv2').detach() 
$('#outerdiv').html() 
+1

Просто заметьте, это выберет все div в вашем div, которые не '# innerdiv2'. Это ВКЛЮЧАЕТ div без идентификатора (в котором все еще будет '# innerdiv2'). –

+0

Спасибо, ребята, но то, что написал Дракрир в круглых скобках, это то, с чем у меня проблемы. Мне нужно мое предупреждение ($ ('# outerdiv div: not (# innerdiv2), # outerdiv'). Html()), чтобы показать мне структуру без innerdiv2. ) – frenzy

+0

Спасибо за объяснение, все, что мне нужно знать. – frenzy

1

Я сначала подумал, вы могли бы сделать это с помощью селекторов, но если вы хотите HTML структуру, я полагаю, вам нужно на самом деле есть html-структуру, а не список совпадающих элементов с помощью #selector. К оглавлению:

$(document).ready(function(){ 
    var clone = $('#outerdiv').clone() 
    $(clone).hide(); 
    $('body').append(clone); 
    $(clone).attr('id','cloneddiv'); 
    $('#' + $(clone).attr('id') + ' #innerdiv2').remove(); 
    console.log($(clone)); 
$(clone).remove(); 
}); 

Консоль.log() относится к инструменту каротажа консоли Firebug. Это дает то, что вы ищете, в некотором роде.

Хотелось бы отметить, что у кого-то был такой ответ, но они удалили его. Не знаете, почему ...

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