2013-05-22 3 views
0

Ниже приведена часть кода, который я использую для получения href или src изображения известного класса или идентификатора. Console.log() возвращает значение null, даже если оно находится в инструкции if, проверяющей, что используемый позже атрибут не является нулевым. Конечно, попытка получить href или src из null не заканчивается хорошо.Если инструкция проверки не равна нулю, игнорируется

for(var i = 0 ; (i < sitelist[site].img_id.length) && (img === undefined) ; i++) 
{ 
    if(document.getElementById(sitelist[site].img_id[i]) !== undefined) 
    { 
     if(document.getElementById(sitelist[site].img_id[i]) !== null) 
     { 
      console.log(document.getElementById(sitelist[site].img_class[i])); 
      if(document.getElementById(sitelist[site].img_class[i]).href !== undefined) 
      { 
       img = document.getElementById(sitelist[site].img_class[i]).href; 
      } 
      if(document.getElementById(sitelist[site].img_class[i]).src !== undefined) 
      { 
       img = document.getElementById(sitelist[site].img_class[i]).src; 
      } 
     } 
    } 
} 

Есть ли конкретный способ проверки того, что что-то является нулевым или это проблема в другом месте?

+0

Там нет нуля в JavaScript –

+3

@PrasathK [да есть] (http://stackoverflow.com/q/801032/447356). Возможно, это не то же самое, что и на языках, таких как C или C#, но «null» является объектом, таким образом, он существует. –

+0

Конечно, в js есть нуль, вы совершенно не правы! http://www.w3schools.com/js/js_datatypes.asp?output=print – Oscar

ответ

0

Ваши тесты null и undefined верны, хотя и дольше, чем необходимо.

Ваша фактическая проблема заключается в том, что вы тестируете .img_id[i], но затем используете .img_class[i].

Вот более сжатая версия существующего кода.

for(var i = 0 ; (i < sitelist[site].img_id.length) && (img === undefined) ; i++) { 

// Here you're testing the `img_id[i]` 
    var img_id = document.getElementById(sitelist[site].img_id[i]); 

    if(img_id != null) { 

// Here you're trying to use a different element 
     var img_clss = document.getElementById(sitelist[site].img_class[i]); 
     console.log(img_clss); 

     if(img_clss.href !== undefined) { 
      img = img_clss.href; 
     } 
     if(img_clss.src !== undefined) { 
      img = img_clss.src; 
     } 
    } 
} 

Если значения не совпадают, тестирование на одно не скажет вам, существует ли другой.

Я не знаю, что это за намерение, но, возможно, вам просто нужно изменить элемент внутри if.

for(var i = 0 ; (i < sitelist[site].img_id.length) && (img === undefined) ; i++) { 
    // Here you're testing the `img_id[i]` 
    var img_id = document.getElementById(sitelist[site].img_id[i]); 

    if(img_id != null) { 
     // Now we're using the same element that we tested! 
     console.log(img_id); 

     if(img_id.href !== undefined) { 
      img = img_id.href; 
     } 
     if(img_id.src !== undefined) { 
      img = img_id.src; 
     } 
    } 
} 
+0

Спасибо! Реальная проблема была в том, что я проверял img_id, а затем использовал img_class. Мне стыдно. Я улучшу его читаемость и компактность. –

+0

Добро пожаловать. –

1

Заменить

id[i]) !== undefined 

с

id[i]) != undefined 

во всех заявлениях

+0

Все еще не работает. Нужно ли мне также менять значение!! Null? –

+0

@CaramelTruffle да, вы должны меняться во всех местах – PSR

+0

@CaramelTruffle вы пробовали это, заменив в местах alla – PSR

1

Чтобы проверить, если найден элемент, просто используйте

var elem = document.getElementById(sitelist[site].img_id[i]); 
if (elem) { 
    // proceed from there 

Обратите внимание, что я объявлен переменная. Повторение вашего document.getElementById(sitelist[site].img_id[i]) делает ваш код трудным для чтения (и, следовательно, отладки и обслуживания).

+0

Я согласен с частью читаемости, но разве не так плохо в отношении времени, необходимого для выполнения кода? –

+0

@CaramelTruffle Наоборот: он избегает выборки элемента более одного раза. –

+0

Я запомню его и начну использовать его. Благодарю. –

2

Вы можете просто попробуйте приведенный ниже код.

Заменить

if (document.getElementById(sitelist[site].img_id[i]) !== undefined) { 
    if (document.getElementById(sitelist[site].img_id[i]) !== null) { 
     // ... 
    } 
} 

с

if (document.getElementById(sitelist[site].img_id[i])) { 
    // process here 
} 

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

+0

Кажется, хорошая идея, но она все еще не работает. –

+0

http://stackoverflow.com/questions/2559318/how-to-check-for-undefined-or-null-variable-in-javascript – SivaRajini

+0

он будет работать вызывающе, поэтому вам нужно использовать правильным образом – SivaRajini

Смежные вопросы