2013-11-20 3 views
1

У меня возникли некоторые проблемы с этим кодом:Javascript вопрос о getelementbytagname

var lista_input = document.getElementsByTagName("input"); 

console.log(lista_input); 
console.log(lista_input[0]); 

Первый журнал правильно показать мне:

[item: function] 
0: input 
1: input 
length: 2 
__proto__: NodeList 

но второй журнал показать мне:

undefined 

Я не понимаю причину, это может показать мне первый элемент ввода в dom!

+2

, который должен отлично работать так, как вы ожидаете, вы уверены, что ничего не происходит с 'lista_inputs' между двумя вызовами журнала? – geevee

+0

Это должно работать ... попробуйте на этом сайте: 'document.getElementsByTagName (" input ") [0]' – megawac

+1

Ваш код в порядке. проверьте этот http://jsfiddle.net/kbJpj/19/ –

ответ

1

Проблема возникает из-за того, что возвращаемое значение document.getElementsByTagName является живой NodeList:

var l = document.getElementsByTagName('div'); 

console.log(l[0]); // undefined 

var d = document.createElement('div'); 
document.body.appendChild(d); 

console.log(l[0]); // div 

Объедините это с тем, что вы называете код до того, как документ будет готов (так до появления элементов в список) и известную ошибку в коде консоли, которая может отображать объекты в состоянии после вызова console.log, и у вас есть точное поведение, которое вы испытываете.

Повторим:

var lista_input = document.getElementsByTagName("input"); 
// lista_input is a live NodeList with 0 elements 

console.log(lista_input); // will print the lista_input object at a later point 
console.log(lista_input[0]); // will print undefined at a later point 

/* time passes, dom is loaded */ 
// lista_input now has the inputs you expect it to have 

/* time passes */ 
// logs are now shown in Console 

EDIT: Для того, чтобы получить хороший журнал, вы можете stringify объект при входе его, превращая его в примитивное значение, которое получает вошедшего правильно:

var lista_input = document.getElementsByTagName("input"); 

console.log(JSON.stringify(lista_input)); // {"length":0} - empty list 
console.log(JSON.stringify(lista_input[0])); // undefined 

PS : Ссылка на сообщение в блоге с объяснением ошибки в консоли: http://techblog.appnexus.com/2011/webkit-chrome-safari-console-log-bug/

Ссылка на вопрос с запросом исправление ошибки консоли: How can I change the default behavior of console.log? (*Error console in safari, no add-on*)

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