2010-06-14 4 views
7

Я хотел бы получить # из непосредственных детей, которые есть у элемента, а затем получить класс ребенка по определенному индексу. Что-то вроде:Как получить доступ к дочернему элементу из детей()?

var index = 25; 
var children = $("#myListElement").children(); 
if (index < children.length) { 
    if (children[index].hasClass("testClass")) { 
     alert("hi!"); 
    } 
} 

Я думаю, что синтаксис для .children() в порядке, но как я могу получить индексированный элемент из них в стиле Jquery?

Благодаря

ответ

11

Метод children возвращает массив -подобный объект, который содержит простые узлы DOM. Вам нужно обернуть содержащийся элемент с помощью jQuery или получить его с помощью метода eq(index), чтобы использовать jQuery-методы, такие как hasClass.

if ($(children[index]).hasClass("testClass")) 

jQuery не обертывает их по умолчанию по очевидным соображениям производительности.

Если вы используете Firebug или инструменты разработчика Chrome/Webkit, вы получите исключение при попытке вызвать неопределенный метод для объекта. См. example. Убедитесь, что вы смотрите вывод консоли :)

TypeError: Object #<an HTMLLIElement> has no method 'hasClass' 
+4

«дети содержит массив простых узлов DOM» это вводит в заблуждение. 'children()' - это набор jQuery, как и все остальное. Если вы используете '.eq (3)' вместо '[3]', он вернет элемент DOM, завернутый в jQuery, как и ожидалось. Любой результирующий набор jQuery при обращении с помощью '[]' возвращает элемент DOM. –

+0

В основном 'children.eq (index) .hasClass (" testClass ")' как ваш ответ должен быть написан. –

+0

@Doug - утверждение «содержит массив простых узлов DOM» не совсем корректно. jQuery возвращает объект *, подобный массиву *, который содержит узлы DOM, индексированные по числу, как в массиве. Кроме того, исправьте меня, если я ошибаюсь, но не было ли времени, когда jQuery действительно поместил все узлы DOM по умолчанию, прежде чем он упал в пользу производительности? – Anurag

2

Извините, но я нашел ваш вопрос несколько запутанным. Это то, что вы хотите?

var parent = $("#myitem"), 
    count = parent.children().length, 
    index = parent.children(".theClass").index(); 

То, что получает дочерний индекс элемента с определенным классом, не требуется петли.

Однако, если вам нужен класс (Но уже есть индекс), то сделать это:

var parent = $("#myitem"), 
    count = parent.children().length, 
    classN = parent.children()[3].className; 
+1

Я думаю, что ваш второй ответ - это то, для чего OP. – user113716

+0

@patrick Классный. Я думал, что понял этот вопрос, но пример кода с ним меня смутил :) –

0

использование eq():

if (children.eq(index).hasClass("testClass")) 
+0

Will-do, просто я могу задать несколько имен классов в hasClass() для проверки сразу? Как .hasClass («свиная лошадь коза»)? – user291701

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