2011-12-16 2 views

ответ

52

Если у вас есть ссылка на div уже:

$(yourDiv).find("p").eq(0); 

Если первый p всегда будет прямым потомком div, вы могли бы использовать children вместо find.

Некоторые варианты включают:

$(yourDiv).find("p:eq(0)"); //Slower than the `.eq` method 
$(yourDiv).find("p:first"); 
$(yourDiv).find("p").first() //Just an alias for `.eq(0)` 

Обратите внимание, что метод eq всегда будет самый быстрый способ сделать это. Вот результаты quick comparison из eq метода, :eq селектора и :first селектора (я не заморачиваться с методом first, так как это всего лишь псевдоним eq(0)):

enter image description here

+0

Ницца, это выглядит убедительно, спасибо! –

+1

Без проблем, рад, что я мог бы помочь :) Если вам интересно, еще одной альтернативой будет:: lt (1) '. Я почти уверен, что будет медленнее метод '.eq', но это еще один способ добиться того же. –

+0

Вау, это значительная разница. Я не понимаю, почему jQuery позволит: сначала.В фоновом режиме он должен быть преобразован в: nth-child (1). http://jsperf.com/jq-first-vs-eq/3 Есть ли причина, по которой это не сделано? – rkw

6
$('div p:first') 

ответ был слишком короткий для публикации без этого бесполезного предложения.

Редактировать Это определенно медленный вариант. Посмотрев на тест скорости Джеймса, похоже, что селектора jQuery работают лучше всего, когда они переключаются с селекторов css.

+0

@JamesAllardice Это равно .First(), потому что оба соответствуют одному элементу. Является ли это желаемым эффектом, зависит от проблемы Web_Designer. – Colin

+0

@Farrell - Да, он равен '.first' и': first' и ': eq (0)' и ': lt (1)' (существует так много способов написания одного и того же с jQuery), но это должно быть постом кучки. –

+0

@rkw - Обратите внимание, что ': nth-child' не эквивалентен и в этом случае работать не будет. Вы правы в том, что селекторы работают лучше всего, когда у них есть эквивалент CSS, особенно в современных браузерах, потому что вместо Sizzle можно использовать собственные методы 'querySelector' и' querySelectorAll'. –

0
$('div p').first() 

Должно работать. Я думаю.

2

$ ("div p"). First();

или $ ('div p: first');

Ссылка: http://api.jquery.com/first/

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

1

Вы почти знаете ответ (из вашего заголовка сообщения). В jQuery есть селектор, который называется :first-of-type. Используйте его, чтобы найти и добавить класс к первому р теге автоматически, например, так:

$("div p:first-of-type").addClass('someClass'); 
+0

: первый тип и последний тип доступны с jQuery 1.9 – Bell

-1

Это должно работать

$("div p:first-of-type").css("font-size: 10px"); 

Вышеприведенный код находит первый абзац в DIV, как @Denver заострены и изменены его fonts-size к 10px

Вот пример, объясняющий еще больше о jQuery first-of-type selector

+0

Нет, не следует. Этот ответ, по сути, идентичен [тому, который дал Деввер два с половиной года назад] (http://stackoverflow.com/a/16381687/19068), за исключением того, что вы изменили его, чтобы выбрать неправильный элемент. – Quentin

+0

Согласен! и отредактировал код. благодаря – Packer

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