Элементы могут существовать, не находясь на самой странице. Просто добавьте HTML в фиктивный div.
var wrapper = document.createElement('div');
wrapper.innerHTML = "<ul><li>foo</li><li>bar</li></ul>";
wrapper.getElementsByTagName('li').length; // 2
Учитывая ваши правки, мы сталкиваемся с неприятной ситуацией, так как вы хотите getElementById
. Скорее всего, это было бы легко, если бы вы могли просто создать новый виртуальный документ с помощью document.implementation.createDocument
, но IE его вообще не поддерживает.
Использование регулярных выражений - грязное дело, а что если мы увидим что-то вроде <body><input value="</body>" /></body>
? Возможно, вы могли бы просто сделать свое регулярное выражение жадным, чтобы оно перешло к последнему экземпляру </body>
, но если вы столкнетесь с проблемами, может потребоваться более тщательный анализ. Даже если полный фреймворк не подходит, вам может понадобиться использовать что-то вроде Sizzle , ядро библиотек, таких как jQuery, для поиска нужного элемента. Или, если вы действительно чувствуете себя в пуристском настроении, вы можете написать рекурсивную функцию поиска самостоятельно, но зачем использовать этот удар, если кто-то другой уже воспользовался им?
var response_el = document.createElement('html'), foo;
response_el.innerHTML = the_html_elements_content;
foo = Sizzle('#foo', response_el);