Я пытаюсь передать "this" из отрезка, по которому щелкнули, в функцию jQuery, которая затем может выполнить jQuery для первого дочернего элемента этого нажатого элемента. Не могу понять это правильно ...
<p onclick="toggleSection($(this));"><span class="redClass"></span></p>
Javascript:
function toggleSection(element) {
element.toggleClass("redClass");
}
Как мне сослаться на: first-child элемента?
jQuery(document).ready(...)
?Ответы:
Если вы хотите применить селектор к контексту, предоставленному существующим набором jQuery, попробуйте функцию find () :
Йорн Шу-Роде отметил, что вы, вероятно, захотите найти только первого прямого потомка элемента контекста, отсюда и дочерний селектор (>). Он также указывает, что вы также можете использовать функцию children () , которая очень похожа на функцию find (), но ищет только один уровень глубоко в иерархии (это все, что вам нужно ...):
источник
find()
поиск по всем потомкам, и:first-child
может соответствовать один элемент на родителя. Следовательно, этот запрос может возвращать несколько элементов. Или я ошибаюсь?element.children(":first-child")
илиelement.children().first();
Используйте
children
функцию с:first
селектором, чтобы получить единственный первый потомокelement
:источник
TypeError: Object [object HTMLAnchorElement] has no method 'toggleClass'
Я добавил тест jsperf, чтобы увидеть разницу в скорости для разных подходов, чтобы получить первого ребенка (всего более 1000 детей)
дано,
notif = $('#foo')
JQuery способы:
$(":first-child", notif)
- 4304 операций в секунду - самый быстрыйnotif.children(":first")
- 653 операции в секунду - на 85% медленнееnotif.children()[0]
- 1416 операций в секунду - на 67% медленнееРодные способы:
ele.firstChild
- 4934323 операций в секунду (все вышеперечисленные подходы на 100% медленнее по сравнению сfirstChild
)notif[0].firstChild
- 4,913,658 операций в секундуИтак, первые 3 подхода jQuery не рекомендуются, по крайней мере, для первого ребенка (я сомневаюсь, что это будет иметь место и со многими другими). Если у вас есть объект jQuery и вам нужно получить first-child, то получите нативный элемент DOM из объекта jQuery, используя ссылку на массив
[0]
(рекомендуется) или.get(0)
и используйтеele.firstChild
. Это дает те же результаты, что и при обычном использовании JavaScript.все тесты выполнены в Chrome Canary build v15.0.854.0
источник
firstChild
не будут такими же, как у jQuerychildren()
или запросов селектора.firstChild
будет включать текстовые узлы, которые редко желательны.contents()
Функция jQuery будет включать их, ноchildren()
не будет. Более новые браузеры поддерживаютfirstElementChild
первый дочерний элемент, но IE <9 не поддерживает его. Таким образом, если вы используете,firstChild
вы должны вручную найти первый нетекстовый дочерний узел.$(":first-child", notif)
должно быть$(":first", notif)
для ожидаемого поведения. Первый вернет всех потомков первого-дочернего элемента.Найти всех детей и получить первый из них.
источник
.children(':first')
.Ты пробовала
Я думаю, что вы хотите установить свой элемент в качестве контекста для вашего поиска. Возможно, есть лучший способ сделать это, и некоторые другие гуру jQuery подскажут вам здесь :)
источник
element
него есть внукиЯ только что написал плагин, который использует,
.firstElementChild
если это возможно, и возвращается к итерации по каждому отдельному узлу, если это необходимо:Это не так быстро, как решение для чистого DOM, но в тестах jsperf под Chrome 24 он был на пару порядков быстрее, чем любой другой метод на основе селектора jQuery.
источник
document.body
еще не инициализирован, 2) Производительность намного лучше, чем у альтернатив, если количество дочерних узлов очень велико. Только для нескольких детей (скажем, менее 10)$('>:first-child',context)
это немного быстрее. На производительность влияет только количество детей, а не глубина.document.body
- я посмотрю на это.Вы можете использовать DOM
источник
Это можно сделать с помощью простой магии, подобной этой:
Ссылка: http://www.snoopcode.com/jquery/jquery-first-child-selector
источник
пожалуйста, используйте это, как это во-первых, дайте имя класса для тега p, как "myp"
затем используйте следующий код
источник
Если вы хотите немедленного первого ребенка, вам нужно
Если вы хотите конкретный первый элемент в dom от вашего элемента, используйте ниже
попробуйте: http://jsfiddle.net/vgGbc/2/
источник
element
это DOM-узел, то$(element).first()
это эквивалентно$(element)
, а не его первому дочернему элементу.