15.11.2009, 19:27
|
|
Модератор Всея Форума
|
|
Регистрация: 14.05.2009
Сообщений: 4,021
|
|
Сообщение от Temchik
|
document.getElementsByTagName("head")[0]
|
document.getElementsByTagName("head")[0] не вернёт HEAD, т.к. document указывает на body (вроде как) и ищет там тег с именем head и не находит. Я же приводил пример, как можно получить HEAD:
document.documentElement.getElementsByTagName('HEAD')[0].
Дальше.
Вместо setAttribute используй свойства узлов:
link.href - путь,
link.rel - тип.
Советую почитать документацию DOM.
Последний раз редактировалось B~Vladi, 15.11.2009 в 19:33.
|
|
15.11.2009, 19:36
|
|
Модератор Всея Форума
|
|
Регистрация: 14.05.2009
Сообщений: 4,021
|
|
На будущее:
свойство документа (document) documentElement указывает на корень этого документа - html. В нём и надо искать head, а в нём уже и ссылки на стили. Ещё могут быть линки и в body. Там их можно найти в document.body.
|
|
15.11.2009, 19:47
|
|
|
Регистрация: 10.07.2008
Сообщений: 3,873
|
|
Сообщение от B~Vladi
|
document.getElementsByTagName("head")[0] не вернёт HEAD, т.к. document указывает на body (вроде как) и ищет там тег с именем head и не находит.
|
Чо? Никуда он не указывает, document.getElementsByTagName("head") найдет <head>.
Temchik, вы break с return не перепутали?
Последний раз редактировалось Octane, 15.11.2009 в 19:56.
|
|
15.11.2009, 19:55
|
|
Рассеянный профессор
|
|
Регистрация: 06.04.2009
Сообщений: 2,379
|
|
document круче чем html, html в нем находится. Раньше я этого не знал и вот эта функция:
parent: function(self, nodeName) {
if (self) {
if (nodeName) {
nodeName = nodeName.toLowerCase();
while ((self = self.parentNode) && self.nodeName.toLowerCase() != nodeName);
return $(self);
}
return $(self.parentNode);
}
}
только написанная через tagName, а не через nodeName, в определенных ситуациях вызывала ошибку.
|
|
15.11.2009, 20:01
|
|
Модератор Всея Форума
|
|
Регистрация: 14.05.2009
Сообщений: 4,021
|
|
Riim, я из твоей функции ничего не понял, можно на чистом JS?!
Octane, document - это документ и он не обязан указывать на своих детей. Есть свойство документа: documentElement - корень документа, от которого и нужно отталкиваться в поиске.
|
|
15.11.2009, 20:04
|
|
|
Регистрация: 10.07.2008
Сообщений: 3,873
|
|
B~Vladi, для чего тогда у document есть getElementsByTagName и другие методы для поиска элементов?
|
|
15.11.2009, 20:09
|
|
Модератор Всея Форума
|
|
Регистрация: 14.05.2009
Сообщений: 4,021
|
|
Сообщение от Octane
|
B~Vladi, для чего тогда у document есть getElementsByTagName и другие методы для поиска элементов?
|
Octane, у document кроме как getElementsByName больше ничего нет, что касается поиска элементов. Реализация сама решит какие свойства иметь, для всего остального есть documentElement.
PS: document это не <HTML>...
|
|
15.11.2009, 20:24
|
|
|
Регистрация: 10.07.2008
Сообщений: 3,873
|
|
Ага. Ну чтобы не фантазировать, что кому должен, и какая реализация, что решает, полезли в W3C читать доки:
Сообщение от W3C
|
The Document interface represents the entire HTML or XML document. Conceptually, it is the root of the document tree, and provides the primary access to the document's data. Interface Document
|
Здесь сказано, что document является root-элементом дерева. Смотрим там же дальше интерфейс:
Сообщение от W3C
|
interface Document : Node {
…
NodeList getElementsByTagName(in DOMString tagname);
…
};
|
О_о getElementsByTagName есть у document по стандарту, листаем дальше:
Сообщение от W3C
|
getElementsByTagName
Returns a NodeList of all the Elements with a given tag name in the order in which they are encountered in a preorder traversal of the Document tree.
|
Говорится про Document tree, ничего про отдельную ветку с <body> не сказано.
Так почему надо искать <head> с помощью document.documentElement.getElementsByTagName("hea d"), а не document.getElementsByTagName("head")?
|
|
15.11.2009, 20:24
|
|
Рассеянный профессор
|
|
Регистрация: 06.04.2009
Сообщений: 2,379
|
|
Сообщение от B~Vladi
|
Riim, я из твоей функции ничего не понял, можно на чистом JS?!
|
так $ убрать и будет на чистом js. Я просто помню ты давно показывал свою такую же функцию (там еще с рекурсией), и у тебя там тоже через tagName было, вот я и показываю, что бы ты у себя проверил, а то вдруг тоже ошибка. Ошибка в том, что если из родительских тегов никто не подходит, то цикл доходит до document у которого tagName == null, ну и toLowerCase к null вызовет ошибку.
Последний раз редактировалось Riim, 15.11.2009 в 21:01.
|
|
15.11.2009, 20:30
|
|
|
Регистрация: 10.07.2008
Сообщений: 3,873
|
|
И еще вот:
alert(document.childNodes[0].nodeName)
|
|
|
|