2013-10-28 3 views
1

Это является HTML структура: (смотри также в jsfiddle здесь: http://jsfiddle.net/hQ5dZ/)JQuery: первый-ребенок (без удостоверения личности или классов)

<div id="fields">  
    <div> 
     <input type="file" /> 
     <input type="button" value="+add"> 
    <div> 
    <div> 
     <input type="file" /> 
     <input type="button" value="+add"> 
    <div> 
</div> 

Второй JQuery-заявление ниже не работает, почему?

$('#fields').children().hide(); 
$('#fields :first-child').show(); 

EDIT: желательное поведение -> Первый Div-ребенок (с его содержанием) должен появиться

+1

его работая для меня в chrome –

+1

Какое поведение вы надеялись? – nnnnnn

+0

должен появиться первый ди-ребенок – Gabriel

ответ

3

Вы не закрывали div, вместо этого создавался новый дочерний элемент div, который заставлял элемент #fields иметь только одного ребенка.

Так $('#fields').children().hide() скрывал ребенка, а затем $('#fields > :first-child').show() показывал его обратно.

<div id="fields"> 
    <div> <!-- fc-1 --> 
     <input type="file" /> <!-- fc-2 --> 
     <input type="button" value="+add" /> 
    </div> <!--not closed--> 
    <div> 
     <input type="file" /> <!-- fc-3 --> 
     <input type="button" value="+add" /> 
    </div> 
</div> <!--not closed--> 

$('#fields').children().hide(); 
$('#fields > :first-child').show(); 

Дем: Fiddle

Также второй селектор обновляется, поскольку #fields :first-child подберет все дочерние элементы #fields, которые являются первым потомком своего родителя, в приведенной выше разметке будет выбрать все поля, отмеченные, как fc-x

+2

Я дал вам +1, потому что вы исправили селектор, добавив '>', но вы можете добавить объяснение об этом. (Я знаю, что это работает без него, но, на мой взгляд, это более правильно). – nnnnnn

+0

@downvoter я пропустил что-нибудь –

7

Ваша разметка является недопустимым - вы не закрывая <div> и <input> теги:

<div id="fields">  
    <div> 
     <input type="file" /> 
     <input type="button" value="+add" /> 
    </div> 
    <div> 
     <input type="file" /> 
     <input type="button" value="+add" /> 
    </div> 
</div> 

После изменения разметки до действительного синтаксиса она работает - http://jsfiddle.net/teddyrised/nBbxY/

+0

О, Боже мой! Спасибо! – Gabriel

3

Помимо закрытия необходимых тегов вы можете укорачивают вам JQuery код, как это так, к примеру:

$('#fields').children().hide().eq(0).show(); 

Работая пример: http://jsfiddle.net/nBbxY/1/

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