| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > JavaScript: Общие вопросы > document.write или document.createElement? |
| Автор: Silwester 9.7.2007, 15:00 | ||||||
| Всем добрый день, Подскажите пожалуйста, что лучше использовать для добавления новых узлов в HTML Способ через document.write
или через document.createElement и AppendChild
? Т.е. есть ли какие-либо преимущества(например, для меня - 1-й намного удобней)/недостатки для обоих случаев, желательно с профессиональной точки зрения. В любом случае интересно мнение каждого. И вторая часть вопроса: Эти функции я загружаю в документ так
почему браузер выдает ошибку на этой строчке с формулировкой Не поддерживается ? (хотя при этом загружает страницу) Заранее благодарен. |
| Автор: stup 9.7.2007, 15:42 | ||||
| Используйте тот способ, который Вам более удобен в данной ситуации. Первый способ быстрее, но второй предоставляет больший контроль над создаваемыми элементами. Ошибка выдается, потому что у функции создания элементов через DOM у Вас название неправильное Кроме этого, вместо
В первом случае Вы присваиваете window.onload результат, который возвращает функция Append_d_write, а во втором ссылаетесь на нее. |
| Автор: Silwester 9.7.2007, 15:59 |
| А когда необходимо передать этой функции параметры - как поступить? Насчет неправильного названия - а какое будет правильным?) |
| Автор: stup 9.7.2007, 16:04 | ||||
и
Работать вместе не будут Насчет параметров - опишите ситуацию подробней, не понятно, что Вы имеете ввиду. |
| Автор: Silwester 9.7.2007, 16:15 |
| Это понятно)) Пусть у меня будет функция function f(k) { alert(k); } и я захочу сделать ее onload(простенький, ничего не подразумевающий пример) и напишу window.onload=f откуда она будет знать с каким параметром ей запуститься в то же время window.onload=f(1) работать не будет, т.к. ...не будет Так вот и вопрос - как передать параметр(ы) для функции, которая должна быть запущена onload? |
| Автор: stup 9.7.2007, 16:25 | ||
| Вот Вы и подошли к самой сути JavaScript Нужно стараться избегать по смыслу таких функций, но если уж совсем приспичило передать параметр, то можно это сделать через объект, на событие которого Вы хотите повесить функцию, что бы в последстивии достучаться до параметра через this.
Если параметров много, то их лучше заворачивать в какой нибудь класс ParameterWrapper. Обратите внимание на слово this. И еще советую почитать http://forum.vingrad.ru/forum/topic-32350.html |
| Автор: Zeroglif 9.7.2007, 16:51 | ||||
|
| Автор: stup 9.7.2007, 18:33 |
| Тогда this не пашет :( |
| Автор: Zeroglif 9.7.2007, 20:44 |
A зачем там this, для onload окна-то? |
| Автор: Silwester 10.7.2007, 11:03 | ||||
| Спасибо, оба тспособа действительно годятся Еще по первой части вопроса Вот используемый пример:
Вопрос: почему AppenChild выводит результат с background, то есть как положено, а Append_d_write background не выводит, а выводит результат с белым фоном, то есть div как будто не действует? В тоже время если запустить ф-ю Append_d_child неправильно)):
браузер выдаст ошибку, но результат будет и будет с background!?! |
| Автор: Zeroglif 10.7.2007, 12:02 |
| Ты просто не до конца разобрался с методом write(). Упрощённо говоря, он или пишет в поток (пока страница ещё грузится/поток не закрыт), или при уже закрытом потоке разрушает текущий документ и всё пишет в новый. Когда ты вызываешь document.write() после загрузки (по событию onload), текущий документ сначала разрушается и аргументы метода пишутся уже с чистого листа. Отсюда ты не видишь никаких стилей. Когда же ты справа от onload ставишь не функцию, а сразу вызов, то безотносительно к событию функция будет вызвана в потоке (во время загрузки) тогда, когда до строчки вызова дойдёт интерпретатор. Отсюда предыдущий документ живёт, в том числе и его стили, а в него спокойно дописываются аргументы метода write(). |
| Автор: Silwester 10.7.2007, 15:22 |
| Ok спасибо |