Не хочется указывать на очевидное, но в вашем примере obj1_Meta и obj2_Meta - это уникальные идентификаторы, так что если это так в вашем рабочем коде:
document.getElementById('obj1_Meta').getElementsByTagName('meta')[0].innerHTML;
будет работать как описано. Как двойная проверка, вы передумали это?
Если нет, то облом ...
Каким бы «плохим» или «неправильным» ни был ваш код, вариант, который будет работать, - это использовать JavaScript-фреймворк, такой как jQuery. После того, как вы включили его, вы можете получить элементы, передав ему селектор CSS (даже семантически неправильный), например, так:
$('#obj1 #obj1_Meta meta').html()
$ () - это способ jQuery сказать document.getElementById () ... на стероидах.
.html () является его эквивалентом .innerHTML
Другие фреймворки, такие как PrototypeJS и MooTools, также предоставляют аналогичную функциональность.
Прототип, например:
$$('#obj1 #obj1_Meta meta').innerHTML;//note the double $'s
Фреймворки позволяют сэкономить много времени и усилий, связанных с совместимостью браузера, отсутствием методов JavaScript (таких как getElementsByClassName) и быстрым кодированием AJAX. Эти вещи делают их хорошей идеей для использования в любом случае.