2013-04-08 4 views
0

Я занимаюсь разбором XML и сталкиваюсь с какой-то странной проблемой. Имя getElementsByTagName из элемента DOM работает, но getElementById не работает. Chrome дает эту ошибку в любом месте я называю getElementById для манифеста:getElementsByTagName работает, но getElementById не работает?

Object #<Element> has no method 'getElementById' 

Но как-то getElementByTagName работает просто отлично.

var manifest = content.getElementsByTagName("manifest")[0]; 
var spine = content.getElementsByTagName("spine")[0]; 
var itemref = spine.getElementsByTagName("itemref")[0].getAttribute("idref"); 
alert(itemref);//works 
var firstpage = manifest.getElementById(itemref).getAttribite("href"); 

Может ли кто-нибудь объяснить мне, почему getElementById DOM не работает для меня?

test = manifest.getElementById("any value");//Problem 
test = manifest.getElementsByTagName("any value");//no Problem 

ответ

3

Вы не можете назвать getElementById как метод произвольных элементов, она доступна только на document элементе. Это имеет смысл, поскольку в HTML-документе не должно быть дубликатов идентификаторов.

Это, как говорится, ваш звонок getElementById("a") выглядит странно; у вас действительно есть элемент с id="a", или вы пытаетесь получить ссылку на произвольный якорь?

+0

Прошу прощения за неясность. getElementById («a») должен быть getElementById («любое значение»), потому что это просто объяснение, что getElementById не работает и getElementsByTagName делает. Я должен буду написать свою собственную функцию getElementById, чтобы выполнить это. Я обрабатываю сложный XML-файл с DOM Parser. –

+0

Итак, вам нужно разместить повторяющиеся идентификаторы, это проблема? – bfavaretto

+0

Нет никаких дубликатов идентификаторов внутри XML, поэтому я хотел использовать getElementById, но я не знал, что он не является частью DOMElement, поэтому мне придется написать свой собственный. –

4

getElementById ищет уникальный идентификатор элемента, а не тип элемента, которым он является. Таким образом, если ваш тег выглядел следующим, он будет работать для обоих сценариев:

<a id="a"> 
+0

Извините, но вы неправильно поняли мой вопрос. Контент - это сложный XML-файл, а не HTML с тегами . Я не знал, что getElementById принадлежит только объекту document, но getElementsByTagName для любого объекта DOM Parser, как указано bfavaretto. –

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