jquery, селектор для класу в ідентифікаторі


91

Нижче, як мені вибрати елементи, що містять клас my_classв елементі за допомогоюid = "my_id" ?

Зверніть увагу, що елемент може також мати інший клас, який я не обираю.

<div id = "my_id">
    <span class = "my_class hidden">hi</span>
    <span class = "my_class">hello</span>
</div>

намагався

$("#my_id [class*=my_class ]")

Відповіді:


150

Ви можете використовувати селектор класу разом із селектором нащадків

$("#my_id .my_class")

Чи можу я поєднати це з: first (щоб отримати перший елемент цього класу всередині #my_id)?
jakob.j

1
@ jakob.j$("#my_id .my_class:first")
Arun P Johny

Чи можу я використовувати для класу те саме, що ідентифікатор $ (". My_class #my_id"), коли id визначено всередині класу
dhS

48

Просто використовуйте звичайний селектор класу ol.

$('#my_id .my_class')

Не має значення, чи має елемент також інші класи. Він має клас .my_class , і він знаходиться десь усередині #my_id , тому він буде відповідати цьому селектору.

Щодо продуктивності

Згідно з документацією щодо продуктивності селектора jQuery , швидше використовувати два селектори окремо, наприклад:

$('#my_id').find('.my_class')

Ось відповідна частина документації:

Селектори на основі ідентифікатора

// Fast:
$( "#container div.robotarm" );

// Super-fast:
$( "#container" ).find( "div.robotarm" );

.find()Підхід швидше , тому що перший етап відбору здійснюється без проходження через двигун Sizzle селектора - ID тільки вибір обробляється з допомогою document.getElementById(), що дуже швидко , тому що вона є рідною для браузера.

Вибір за ідентифікатором або за класом (окрім іншого) викликає функції, document.getElementById()що надаються браузером, такі як досить швидкі, тоді як використання селекторного нащадка викликає механізм Sizzle, як згадано, який, хоча і швидкий, повільніший за запропоновану альтернативу.



1

Я думаю, що ваше прохання вибрати лише <span class = "my_class">hello</span>цей елемент. Ви робите ось що. Якщо я правильно розумію ваше запитання, це відповідь,

$("#my_id [class='my_class']").addClass('test');

DEMO


$("#my_id .my_class")- коротший еквівалент; у цьому випадку ви нічого не отримаєте від використання селектора атрибутів.
doppelgreener

Я сподіваюся, що це також зробило ту саму роботу, що і ваша відповідь, поки я відповідаю на запитання, на яке ви відповіли, я не помітив, що з моменту відповіді я не видалив питання.
Тірумалай-муруган

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.