2012-05-09 3 views
0

По какой-то причине в приведенном ниже коде currentRow.cells возвращает {}. Как я могу проверить это? Я не хочу выполнять строки, если currentRow.cells возвращает {}.Как проверить значение {} в JavaScript?

currentRow = document.createElement("TR"); 
if(currentRow.cells.length > 0) { .. do something } 

UPDATE 1:

Все, что я хочу, чтобы проверить на пустой объект. если currentRow.cells - пустой объект, то ничего не делать.

+2

Это пустой объект. И вопрос непонятен. – zerkms

+0

Вы делаете 'createElement ('tr')'. Разве это не сделает новый '', который будет пустым? –

+0

@Rocket Да, как я могу проверить пустой объект. Бывают случаи, когда это не пусто. – azamsharp

ответ

1

jQuery имеет вспомогательный метод, называемый $.isEmptyObject().

Их код это просто:

function isEmptyObject(obj) { 
    for (var name in obj) { 
     return false; 
    } 
    return true; 
} 

Если вы не хотите использовать всю библиотеку JQuery, вы можете поймать этот метод и бросить его где-нибудь в свой код базы!

+0

Проблема 'currentRow.cells' - не простой объект, это [' HTMLCollection'] (https://developer.mozilla.org/En/DOM/HTMLCollection), поэтому это не работает. –

+0

Я просто отвечаю на вопрос, который спросил OP: «Все, что я хочу, это проверить пустой объект». – Jason

+0

", если currentRow.cells является пустым объектом" К сожалению, это не сможет проверить, является ли currentRow.cells пустым объектом. Все, что он сделает, это сказать вам, является ли 'currentRows.cells'' undefined' или нет. –

0

Чтобы ответить на ваш вопрос в заголовке:

function is_empty(obj) { 
    for(var i in obj) { 
     if(obj.hasOwnProperty(i)) 
      return false; 
    } 
    return true; 
} 

alert(is_empty({})); // true 
+0

Проблема 'currentRow.cells' - не простой объект, это [' HTMLCollection'] (https://developer.mozilla.org/En/DOM/HTMLCollection), поэтому это не работает. –

2

Я всегда получаю объект типа HTMLCollection.

Вы должны быть в состоянии затем проверить длину коллекции с помощью кода, как это:

if(currentRow.cells.length != 0) { 
    //row and cells exist, work with them 
} 
0

currentRow является <tr> (или HTMLTableRowElement), и currentRow.cells является HTMLCollection (не Array ([]) или объект ({})).

Если currentRow.cells не определено, это означает, что current строка не является <tr>, это еще один элемент.

Чтобы проверить, является ли DOM элемент пуст, вы можете использовать childNodes (это не никогда быть undefined).

if(currentRow.childNodes.length === 0){ 
    // empty 
} 
else{ 
    // not empty 
} 

Редактировать: Еще лучше, вы можете использовать hasChildNodes.

if(!currentRow.hasChildNodes()){ 
    // empty 
} 
else{ 
    // not empty 
} 
0

cells свойство не доступно в <tr> на IE8 и ниже. Тренировка состоит в том, чтобы использовать childNodes, как было предложено выше. Следующий код проверяет, не определено ли cells:

var currentRow = document.createElement("TR"); 
if (typeof currentRow.cells === "undefined") { 
    // use currentRow.childNodes 
} 
else { 
    // use currentRow.cells 
} 
Смежные вопросы