Як дізнатися, чи існує div з конкретним ідентифікатором у jQuery?


266

У мене є функція, яка додає <div>елемент до клацання. Функція отримує текст натиснутого елемента і присвоює йому змінну, що називається name. Потім ця змінна використовується як <div> idдоданий елемент.

Мені потрібно перевірити, чи існує a <div> idз name, перш ніж додати елемент, але я не знаю, як це знайти.

Ось мій код:

$("li.friend").live('click', function() {
  name = $(this).text();

  // if-statement checking for existence of <div> should go here
  // If <div> does not exist, then append element
    $("div#chatbar").append("<div class='labels'><div id='" + name + "' style='display:none;'></div>" + name + "</div>");

  // Else
    alert('this record already exists');
});

Це здається досить простим, але я отримую помилку " Несподіваний кінець файлу під час пошуку назви класу" . У мене немає поняття, що це означає.

if (document.getElementById(name)) {
  $("div#" + name).css({bottom: '30px'});
} else {
  $("div#page-content div#chatbar").append("<div class='labels'>" + name + "</div><div id='" + name + "'></div>");
}

Більше того, що я хочу мати змогу видалити цей елемент, якщо закрити його, який слід видалити div id [name]з документа, але .remove()цього не зробити.

Ось код для цього:

$(".mini-close").live('click', function(){
  $(this).parent().remove();
});

Я додав .mini-closeдо функції додавання в якості дитини, .labelsтому з'явився спосіб закрити додане, <div>якщо потрібно. Після натискання .mini-closeта спроби знову натиснути на те саме ім’я li.friendsвсе одно знаходить div id [name]та повертає першу частину мого ifтвердження.


Несподіваний кінець файлу зазвичай десь зводиться до синтаксичної помилки. $("div#" + name).css({bottom: '30px'});неправильно, так і має бути$("div#" + name).css('bottom', '30px');
Джей Ірвін

Remove () відокремлює елемент з дерева DOM, але не знищує його, тому пошук за ідентифікатором все одно знайде його, якщо ви призначили його змінній, він все одно буде там і т. Д. Рішення тут, якщо ви знайдіть його, додайте його до правильного div (якщо він уже там нічого не відбудеться, якщо його від'єднано / вилучено, воно з’явиться знову), якщо його не знайдено, тоді створіть його.
Джей Ірвін

Відповіді:


539

Ви можете використовувати .lengthпісля селектора, щоб побачити, чи відповідає він будь-яким елементам, наприклад, таким:

if($("#" + name).length == 0) {
  //it doesn't exist
}

Повна версія:

$("li.friend").live('click', function(){
  name = $(this).text();
  if($("#" + name).length == 0) {
    $("div#chatbar").append("<div class='labels'><div id='" + name + "' style='display:none;'></div>" + name + "</div>");
  } else {
    alert('this record already exists');
  }
});

Або версія не для jQuery для цієї частини (оскільки це ідентифікатор):

$("li.friend").live('click', function(){
  name = $(this).text();
  if(document.getElementById(name) == null) {
    $("div#chatbar").append("<div class='labels'><div id='" + name + "' style='display:none;'></div>" + name + "</div>");
  } else {
    alert('this record already exists');
  }
});

98
багато jQuery в частині, що не jQuery: p
jAndy

@ Nick - це не працює для мене. Під час усунення несправностей я попередив про довжину ділового ідентифікатора [name], але він його ніколи не знаходить.
sadmicrowave

8
перевірка == 0 не потрібна, якщо ($ ("#" + ім'я). довжина) {} працює добре.
ScottE

3
@ScottE - Хоча, ти маєш на увазі !$("#"+name).length):)
Нік Крейвер

1
Я думаю, вам слід зробити ===замість пилки ==.
небезпека89

66

Відповідь Ніка нігтя це. Ви також можете використовувати зворотне значення getElementById безпосередньо як свою умову, а не порівнювати його з нульовим (у будь-якому випадку працює, але я особисто вважаю цей стиль трохи читабельнішим):

if (document.getElementById(name)) {
  alert('this record already exists');
} else {
  // do stuff
}

ви праві, це чудово працює (я, мабуть, робив щось дурне). Однак, коли я замінюю попередження () чимось іншим, у мене виникає помилка: "несподіваний кінець файлу під час пошуку назви класу". чому це відбувається? Ознайомтесь з моєю операційною
програмою

якісь додаткові ідеї від когось?
sadmicrowave

2
Помилка звучить так, що вам не вистачає дужки або крапки з комою.
Rikki

@Philo Що робити, якщо ви шукаєте, щоб відповідати конкретному ідентифікатору, який міститься в масиві
Beaniie

У вас є кілька ідентифікаторів в масиві, і ви хочете знайти кожен з них? Підхід грубої сили полягав би у переході на масив та виклику getElementById для кожного з них.
філо

31

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

if( $('#selector').length )         // use this if you are using id to check
{
     // it exists
}


if( $('.selector').length )         // use this if you are using class to check
{
     // it exists
}

Використовуйте перший, якщо умова для id, і другий для класу.



10
if ( $( "#myDiv" ).length ) {
    //id id ( "#myDiv" ) is exist this will perform
    $( "#myDiv" ).show();

}

Інший спосіб скорочення:

    $( "#myDiv" ).length && $( "#myDiv" ).show();

Це лише приклад всередині функції if, що все може написати, коли присутній id ("#myDiv"), який буде виконувати.
Санджіб Дебнат

5

Ви можете перевірити, використовуючи jquery просто так:

if($('#divId').length!==0){
      Your Code Here
}

1
if ($ ('# divId'). length! = 0) {Your Code Here} це було б правильно
Santosh

4

Найпростіший спосіб ..

if(window["myId"]){
    // ..
}

Це також частина специфікацій HTML5: https://www.w3.org/TR/html5/single-page.html#accessing-other-browsing-contexts#named-access-on-the-window-object

window[name]
    Returns the indicated element or collection of elements.

Це виглядає добре, але тепер є примітка w3.org/TR/html5/…, що "покладаючись на це призведе до крихкого коду".
Ківі Шапіро

3

Ось функція jQuery, яку я використовую:

function isExists(var elemId){
    return jQuery('#'+elemId).length > 0;
}

Це поверне булеве значення. Якщо елемент існує, він повертає true. Якщо ви хочете вибрати елемент за назвою класу, просто замініть #на.


2

Ви можете впоратися з цим різними способами,

Мета - перевірити, чи існує div, тоді виконати код. Простий.

Хвороба:

$('#myDiv').length

Примітка:

#myDiv -> < div id='myDiv' > <br>
.myDiv -> < div class='myDiv' > 

Це повертає число кожного разу, коли воно буде виконане, тому якщо немає div, воно дасть нуль [0], а як у нас немає 0, може бути представлено як помилкове у двійковій формі, тому ви можете використовувати його в операторі if. І ви можете використовувати його як порівняння з жодним числом. хоча будь-яке є три твердження, наведені нижче

// Statement 0
// jQuery/Ajax has replace [ document.getElementById with $ sign ] and etc
// if you don't want to use jQuery/ajax 

   if (document.getElementById(name)) { 
      $("div#page-content div#chatbar").append("<div class='labels'>" + name + "</div><div id='" + name + "'></div>");
    }

// Statement 1
   if ($('#'+ name).length){ // if 0 then false ; if not 0 then true
       $("div#page-content div#chatbar").append("<div class='labels'>" + name + "</div><div id='" + name + "'></div>");
    }

// Statement 2
    if(!$('#'+ name).length){ // ! Means Not. So if it 0 not then [0 not is 1]
           $("div#page-content div#chatbar").append("<div class='labels'>" + name + "</div><div id='" + name + "'></div>"); 
    }
// Statement 3
    if ($('#'+ name).length > 0 ) {
      $("div#page-content div#chatbar").append("<div class='labels'>" + name + "</div><div id='" + name + "'></div>");
    }

// Statement 4
    if ($('#'+ name).length !== 0 ) { // length not equal to 0 which mean exist.
       $("div#page-content div#chatbar").append("<div class='labels'>" + name + "</div><div id='" + name + "'></div>");
    }

1

введіть ідентифікатор, який ви хочете перевірити, у jquery - це метод.

var idcheck = $("selector").is("#id"); 

if(idcheck){ // if the selector contains particular id

// your code if particular Id is there

}
else{
// your code if particular Id is NOT there
}
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.