jQuery: Перевірте, чи існує div з певною назвою класу


235

Використовуючи jQuery, я програмно генерую купу div подібних:

<div class="mydivclass" id="myid1">Some Text1</div>
<div class="mydivclass" id="myid2">Some Text2</div>

Десь ще в моєму коді мені потрібно виявити, чи існують ці DIV. Ім'я класу для divs однакове, але ідентифікатор змінюється для кожного div. Будь-яка ідея, як їх виявити за допомогою jQuery?

Відповіді:


424

Ви можете спростити це, перевіривши перший об'єкт, який повертається з JQuery так:

if ($(".mydivclass")[0]){
    // Do something if class exists
} else {
    // Do something if class does not exist
}

У цьому випадку, якщо в першому ( [0]) індексі є значення truthy , тоді припустимо, що клас існує.

Редагувати 04/10/2013: Я створив тестовий JSPerf випадок тут .


Добре, в будь-якому випадку це лише пошук власності. Мене не хвилює чотири символи, але це може бути зрозуміліше залежно від контексту ...
TJ Crowder

Я закінчив використовувати це рішення, хоча є й інші рішення, які теж працюють. Дякую за швидкі відповіді.
аватар

1
Цікаво, що ви можете подумати, що :firstдодавання туди допоможе продуктивність (не знаю, чи продуктивність є важливим критерієм для @itgorilla), але чи відрізняється вона дивовижно від браузера, мабуть тому, що це змінює вбудовані функції, які jQuery може використовувати для виконання відбір. Ось тестовий випадок, коли div існує , і ось такий, де його не існує .
TJ Crowder

І якщо я не хочу виконувати код, якщо клас не існує?
Томас Себастьян

1
Спробуйте @ThomasSebastianif (!$(".mydivclass")[0]){ /* do stuff */ }
Shaz

117

Можна використовувати size(), але jQuery рекомендує використовувати довжину, щоб уникнути накладних витрат іншого виклику функції:

$('div.mydivclass').length

Так:

// since length is zero, it evaluates to false
if ($('div.mydivclass').length) {

http://api.jquery.com/size/

http://api.jquery.com/length/

ОНОВЛЕННЯ

Вибрана відповідь використовує тест perf, але це дещо недосконало, оскільки він також включає вибір елементів у складі парфуму, що не тестується тут. Ось оновлений тест на парфу:

http://jsperf.com/check-if-div-exists/3

Мій перший запуск тесту показує, що пошук властивостей швидше, ніж пошук індексу, хоча IMO це досить мізерно. Я все ще вважаю за краще використовувати довжину, як на мене, це має більше сенсу щодо наміру коду замість більш стислої умови.


3
За посиланням, яке ви надали на інструмент на jsperf.com, на .lengthданий момент пропонується найкраща середня ефективність.
gmeben

Обслуговує мої потреби з найменшим впливом на перевірку.
Девід О'Реган

77

Без jQuery:

Рідний JavaScript завжди буде швидшим. У цьому випадку: (приклад)

if (document.querySelector('.mydivclass') !== null) {
    // .. it exists
}

Якщо ви хочете перевірити, чи містить батьківський елемент ще один елемент із певним класом, ви можете скористатися одним із наведених нижче. (приклад)

var parent = document.querySelector('.parent');

if (parent.querySelector('.child') !== null) {
    // .. it exists as a child
}

Крім того, ви можете використовувати .contains()метод на батьківському елементі. (приклад)

var parent = document.querySelector('.parent'),
    child = document.querySelector('.child');

if (parent.contains(child)) {
    // .. it exists as a child
}

..і нарешті, якщо ви хочете перевірити, чи містить у певному елементі певний клас, використовуйте:

if (el.classList.contains(className)) {
    // .. el contains the class
}

57
$('div').hasClass('mydivclass')// Returns true if the class exist.

3
Щоправда, це альтернатива, але дорога. Буду повільніше , ніж підхід , який використовується в попередніх відповідях ( помітно повільніше, в деяких браузерах), і має набагато більший вплив пам'яті , а також (JQuery повинен створити масив всіх з divелементів на сторінці, а потім повернутися і проведіть через них, щоб побачити, чи є у них клас, і все викинути масив наприкінці).
TJ Crowder

3
@tj hasClassна 33% швидше, ніж інші селектори тут. Перевірте jsperf.com/hasclass00
Хусейн

1
@Hussein: Тільки з абсолютно нереальною тестовою справою (два divелементи), яка стоїть на стороні самої проблеми, яку я виділив (побудова масиву). Спробуйте це з купою дівок : jsperf.com/hasclass00/2 На моїй копії Chrome це на 63% повільніше, на моїй копії Firefox на 43% повільніше, на Opera на 98% (!) Повільніше. Але більше того, є сенс, що повільніше складати список дівок і потім шукати його, а не надавати селекторному двигуну всю необхідну йому інформацію.
TJ Crowder

1
@Hussein: Зауважте, що я був дуже рівномірним, і висунув збалансовані зустрічні докази вашим вимогам. Мені шкода, якщо я торкнувся нерва, що, здавалося, трапилось і минулого разу. Тільки розслабтеся, це не особистий переляк, це технічна дискусія. В StackOverflow корисні товста шкіра та відкритий розум.
TJ Crowder

1
@Hussein: селектор css HTML5 означає, що це, безумовно, завжди буде найгіршим можливим способом. -1 - не просто видалити свою посаду.
Стефан Кендалл



10

Щоб перевірити наявність divелементів явно:

if( $('div.mydivclass').length ){...}


Це може бути трохи повільніше, ніж .mydivclassзалежно від браузера та версії jQuery.
Стефан Кендалл

Щоправда, але ОП спеціально сказав "jQuery - перевірте, чи існує div з певним іменем класу " (мій наголос), тож ви отримаєте мій голос за те, що я вперше включив ту divчастину селектора.
TJ Crowder

7

Простий код наведено нижче:

if ($('.mydivclass').length > 0) {
   //Things to do if class exist
}

Щоб приховати div з ідентифікатором деталі:

if ($('#'+given_id+'.mydivclass').length > 0) {
   //Things to do if class exist
}

3

Ось кілька способів:

1.  if($("div").hasClass("mydivclass")){
    //Your code

    //It returns true if any div has 'mydivclass' name. It is a based on the class name
    }

2. if($("#myid1").hasClass("mydivclass")){
    //Your code


    //  It returns true if specific div(myid1) has this class "mydivclass" name. 
    //  It is a  based on the specific div id's.
    }           
3. if($("div[class='mydivclass']").length > 0){
    //Your code

   // It returns all the divs whose class name is "mydivclass"
   //  and it's length would be greater than one.
    }

Ми можемо використовувати будь-який із визначених абобе способів на основі вимоги.


2
if ($(".mydivclass").size()){
   // code here
}

size()Метод просто повертає кількість елементів , яке вибирає селектор JQuery - в цьому випадку кількість елементів з класом mydivclass. Якщо він повертає 0, вираз є помилковим, тому його немає, і якщо він повертає будь-яке інше число, діви повинні існувати.


1
Навіщо викликати метод, коли є lengthвластивість? Крім того, це перевіряє наявність будь-якого елемента з цього класу, а не лише a div. (Тепер це може означати те, що ОП мав на увазі, навіть якщо не те, що він / вона сказав.) Дивіться відповідь Стефана Кендала, який робить те, що насправді сказав ОП (хоча, знову ж таки, вони могли означати те, що ви зробили).
TJ Crowder

1
@TJ Crowder: Ну, особисто особистий смак - я просто відчуваю, що метод size () є - чому б не використовувати його. Додаткові накладні витрати на виклик функції (якщо ви не робите це 1000 разів у циклі) є настільки мінімальними, я б краще пішов на трохи чіткіше в коді. Що стосується вашого другого пункту - так, я змінив свою первісну відповідь на видалення divчастини з двох причин: 1) селектор не є тим, що обмежений тим, що ОП використовує divелемент (це може змінитися в майбутньому), і 2) в у більшості браузерів та версій jQuery, AFAIK, це має бути швидше.
Герман Шааф

"Я просто відчуваю, що метод size () є - чому б не використовувати його" Гм, добре. lengthВластивість є, чому б не використати його? Але якщо це ваше вподобання, ярмарок. З іншого боку, я не знав, що ви це відредагували. Якби я збирався це зробити, я би залишив це (знову ж таки, він спеціально сказав "... якщо дів з ..." (мій наголос), а потім додатково зазначив, що якщо не важливо, чи це було divчи ні, ви можете кинути цю частину. Але що б там не було. :-)
TJ Crowder

@TJ Crowder: Так, я думаю, що ми це передумуємо.
Герман Шааф

@TJ Crowder: Але на мій захист, хоча це не місце для обговорення: я відчуваю, що size()метод є, щоб зрозуміти, що ви рахуєте кількість елементів у селекторі jQuery, а не просто будь-який старий масив. Але знову ж таки, це лише моя перевага.
Герман Шааф

2

перевірте, чи існує div з певним класом

if ($(".mydivclass").length > 0) //it exists 
{

}

2
if($(".myClass")[0] != undefined){
  // it exists
}else{
  // does not exist
}

2
Здається майже ідентично цій існуючій відповіді .
Панг

Так, це так ... але я спробував цю відповідь, і це не вийшло. Коли я додав порівняння до "невизначеного", здавалося, він ідеально працює.
stairie

2
var x = document.getElementsByClassName("class name");
if (x[0]) {
alert('has');
} else {
alert('no has');
}

Хоча цей код може відповісти на питання, надаючи додатковий контекст щодо того, чому та / або як цей код відповідає на питання, покращує його довгострокове значення.
Вішал Чходвані

2

У Jquery можна використовувати так.

if ($(".className")[0]){

   // Do something if class exists

} else {

// Do something if class does not exist

}

За допомогою JavaScript

if (document.getElementsByClassName("className").length > 0) {

// Do something if class exists

}else{

    // Do something if class does not exist

}

2

Ось дуже зразкове рішення для контрольного класу (hasClass) у Javascript:

const mydivclass = document.querySelector('.mydivclass');
// if 'hasClass' is exist on 'mydivclass'
if(mydivclass.classList.contains('hasClass')) {
   // do something if 'hasClass' is exist.
}

1

Найкращий спосіб у Javascript:

if (document.getElementsByClassName("search-box").length > 0) {
// do something
}


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