jQuery - Перевірте, чи вже існує елемент DOM


77

Я намагаюся динамічно додавати деякі елементи форми через Ajax за допомогою jQuery. Я хочу переконатися, що не створюю один і той же елемент двічі, тому додаю його лише в тому випадку, якщо він ще не був доданий до DOM.

Усі мої елементи мають унікальний ідентифікатор CSS, наприклад:

$('#data_1')

Я використовую наступне, щоб перевірити, чи вже існує елемент:

if ($('some_element').length == 0) {
    //Add it to the dom
}

Однак він працює лише для елементів, які вже були частиною сторінки при її першому завантаженні.

Як мені також перевірити наявність елементів, які були динамічно створені після завантаження сторінки?

Будь-яка порада буде вдячна.

Дякую.


2
Ваш код буде працювати для всіх елементів у DOM, завантажених через JavaScript або відтворений HTML.
Джон Стріклер,

2
Метод, наведений вище, .lengthповинен працювати з будь-чим, незалежно від того, завантажено він сторінку чи динамічно створено.
Річард Ніл Ілаган,

Добре, припустимо, у мене тоді десь помилка.
Ден,

давайте побачимо решту вашого коду тоді
mcgrailm

1
ви не можете просто зробити if ($ ('some_element'). length) {// code}
Скотт Ромак,

Відповіді:


112

Це має працювати для всіх елементів, незалежно від того, коли вони створені.

if($('some_element').length == 0) {
}

напишіть свій код у функції зворотного виклику ajax, і він повинен працювати нормально.


24
може бути краще, якщо використовувати суворе порівняння "===" замість "==". Просто найкраща практика.
Peeyush

19

Це питання стосується того, чи існує елемент, і всі відповіді перевіряють, чи не існує :) Незначна різниця, але варта згадки.

На основі документації jQuery рекомендується перевірити наявність

if ($( "#myDiv" ).length) {
    // element exists
}

Якщо ви віддаєте перевагу перевіряти відсутність елемента, ви можете скористатися одним із таких варіантів:

if (!$( "#myDiv" ).length) {
    // element doesn't exist
}

або

if (0 === $( "#myDiv" ).length) {
    // element doesn't exist
}

Зверніть увагу, що у другому варіанті я використав ===, який трохи швидший, ніж ==, і поставив 0 зліва як умову Йоди .


14

Тільки для підтвердження того, що ви правильно вибрали елемент. Спробуйте це

if ($('#some_element').length == 0) {
    //Add it to the dom
}


2

якщо IDє - Ви можете використовуватиgetElementById()

var element =  document.getElementById('elementId');
  if (typeof(element) != 'undefined' && element != null)
  { 
     // exists.
  }

АБО Спробуйте за допомогою Jquery -

if ($(document).find(yourElement).length == 0) 
{ 
 // -- Not Exist
}

1
(()=> {
    var elem = document.querySelector('.elem');  
    (
        (elem) ? 
        console.log(elem+' was found.') :
        console.log('not found')
    )
})();

Якщо він існує, він видає вказаний елемент як об'єкт DOM. За допомогою JQuery $('.elem')він повідомляє вам, що це об'єкт, якщо він знайдений, але не який.


0

У цьому випадку ви можете перевірити, чи існує елемент у поточному DOM

якщо ви хочете перевірити, чи існує елемент у дереві DOM (приєднаний до DOM), ви можете використовувати:

var data = $('#data_1'); 
if(jQuery.contains(document.documentElement, data[0])){
    // #data_1 element attached to DOM
} else {
    // is not attached to DOM
}

Я не розумію, як це краще будь-яким чином порівняно з іншими відповідями.
вард

$ (document) .find (yourElement) .length - перевіряє, чи існує елемент у "пам'яті", його не потрібно прикріплювати до dom jQuery.contains (document.documentElement, data [0]) - перевіряє, чи є елемент прикладений до DOM
Markoj

$('#data_1').lengthповерне 1, якщо елемент приєднано до dom, 0 якщо ні. Якщо є якісь інші результати, це те, що селектор був зроблений до зміни DOM. Тож просто зателефонувати $('#data_1')селектору в той момент, коли вам потрібно перевірити, чи він присутній у dom, зробить цю роботу - використання contains()безглуздо.
вард

0
if ($('#some_element').length === 0) {
    //If exists then do manipulations
}

пояснити свою логіку відповіді допоможе
parokodak

0

Ні для порівняння нічого, ви можете просто перевірити, що за допомогою цього ...,.

if(document.getElementById("url")){ alert('exit');}
if($("#url")){alert('exist');}

Ви також можете використовувати функцію html ()

if($("#url).html()){alert('exist');}

-3

Також подумайте про використання

$(document).ready(function() {});

Не знаю, чому ще ніхто тут цього не придумав (певно сумно). Коли ви виконуєте свій код ??? На початку? Тоді ви можете використати верхню згадану функцію ready (), щоб ваш код виконувався після завантаження цілої сторінки (з усіма елементами dom), а не раніше! Звичайно, це марно, якщо ви запускаєте якийсь код, який додає елементи dom після завантаження сторінки! Тоді ви просто хочете дочекатися цих функцій і виконати свій код згодом ...

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