Модераторы: Sardar, Aliance

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> скрипт - создать список на странице 
V
    Опции темы
Valeria
Дата 28.12.2006, 14:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 277
Регистрация: 16.5.2006
Где: Санкт-Петербург

Репутация: нет
Всего: нет



надо написать скрипт создания списка, пишу так

Код

 function newList()
            {
            var obj = document.getElementById('list1'); //это у меня див есть,куда я хочу список сделать
            var ul = document.createElement('ul');
           
            for(var i=0;i<5;i++)
            {
            var li = document.createElement('li');            
            li.innerText = "hello";             
            }
            obj.appendChild(li);
            }

вообще,сюда будет передаваться какой-нибудь параметр,строковый,который будет в списке появляться.
но вообщем-то итак не работает,почему?помогите. smile 
и еще эту функцию можно в onload запускать при загрузке страницы? 
PM MAIL ICQ   Вверх
Aliance
Дата 28.12.2006, 14:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I ♥ <script>
****


Профиль
Группа: Модератор
Сообщений: 6418
Регистрация: 2.8.2004
Где: spb

Репутация: 55
Всего: 137



Код

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<HTML>
<HEAD>
<TITLE>© AlianceHTMLEditor [ http://editor.sut.net.ru/editor.html ]</TITLE>
<script type="text/javascript" language="JavaScript">
<!--//--><![CDATA[//><!--

function make_list() {
    var obj = document.getElementById('list1');
    var ul = document.createElement('ul');

    var li = new Array(5);

    for(i = 0; i < li.length; i++) {
        li[i] = document.createElement('li');
        li[i].innerText = "hello list #" + i;
        obj.appendChild(li[i]);
    }
}

//--><!]]>
</SCRIPT>
</HEAD>

<BODY>

<INPUT type="button" onclick="make_list()" value="make list" />

<div id="list1" style="border: red">&nbsp;</div>

</BODY>
</HTML>

PM MAIL WWW ICQ Skype   Вверх
Valeria
Дата 28.12.2006, 14:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 277
Регистрация: 16.5.2006
Где: Санкт-Петербург

Репутация: нет
Всего: нет



Aliance, супер! огромное спасибо! работает! smile  smile  smile 
PM MAIL ICQ   Вверх
Zeroglif
Дата 28.12.2006, 15:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 644
Регистрация: 22.9.2005

Репутация: 28
Всего: 66



Цитата(Valeria @  28.12.2006,  14:53 Найти цитируемый пост)
работает

Чтобы лучше работало smile обратите внимание  на то, что в скрипте Aliance:

- li создаются прямо в obj, а надо в ul (то есть пропущен шаг ul.appendChild(li[i]) );
- li можно создать один раз, затем клонировать в цикле;
- свойство innerText работает не везде (надо бы createTextNode(), ну, или innerHTML);
- переменная i - глобальная, правильнее сделать её локальной;


Это сообщение отредактировал(а) Zeroglif - 28.12.2006, 15:25
PM MAIL WWW   Вверх
AKS
Дата 28.12.2006, 15:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Участник форума
**


Профиль
Группа: Участник
Сообщений: 725
Регистрация: 20.9.2006

Репутация: 27
Всего: 52



Цитата

пропущен шаг ul.appendChild(li[i])

И еще ма-a-a-ленький шажочек - obj.appendChild(ul). ;)
PM MAIL   Вверх
Valeria
Дата 28.12.2006, 16:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 277
Регистрация: 16.5.2006
Где: Санкт-Петербург

Репутация: нет
Всего: нет



здорово! буду доделывать! а еще есть вопрос,если мне надо сделать не просто список,а чтобы это были ссылки
таким же образом, создавать элемент A?! внутри списка?

Добавлено @ 16:32 
Код

function newList()
            {
            var obj = document.getElementById('list1');
            var ul = document.createElement('ul');
            var li; 
            var a;
            for(var i = 0; i < list.length; i++) {
            li = document.createElement('li');
            a = document.createElement('a');
            a.innerHTML = list[i];            
            //li.innerText = list[i];
            li.appendChild(a);
            ul.appendChild(li); 
            }           
            obj.appendChild(ul);            
            }

вот как-то так,только ссылки не получаются. что не так? smile

Добавлено @ 16:39 
все,поняла,свойство забыла a.href = '#';  smile 
PM MAIL ICQ   Вверх
Aliance
Дата 8.1.2007, 11:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


I ♥ <script>
****


Профиль
Группа: Модератор
Сообщений: 6418
Регистрация: 2.8.2004
Где: spb

Репутация: 55
Всего: 137



со всем согласен, почему так не понимаю:
Цитата(Zeroglif @  28.12.2006,  16:23 Найти цитируемый пост)
- переменная i - глобальная, правильнее сделать её локальной;

PM MAIL WWW ICQ Skype   Вверх
AKS
Дата 8.1.2007, 16:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Участник форума
**


Профиль
Группа: Участник
Сообщений: 725
Регистрация: 20.9.2006

Репутация: 27
Всего: 52



Aliance, а в чем вопрос - почему "переменная i - глобальная", или же почему "правильнее сделать её локальной"?
PM MAIL   Вверх
solenko
Дата 8.1.2007, 18:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1473
Регистрация: 15.1.2006
Где: Украина

Репутация: 9
Всего: 67



AKS, у меня тоже возник тот же вопрос -- "переменная i - глобальная?". Кажется var используется как раз для создания локальных переменых.


--------------------
Ла-ла-ла-ла
Заметьте, нет официального подтверждения, что это не просто четыре слога.
PM MAIL WWW ICQ Skype   Вверх
AKS
Дата 8.1.2007, 19:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Участник форума
**


Профиль
Группа: Участник
Сообщений: 725
Регистрация: 20.9.2006

Репутация: 27
Всего: 52



solenko, Вам все правильно кажется. Просто "переменная i - глобальная" - это цитата комментария, который был адресован второму посту в этой теме. Посмотрите, там i как раз без var, и, как результат, "глобализация"...
Ну и заодно уж можно написать, что в этом случае локальная переменная "правильней" хотя бы потому, что просто (именно просто, а если не просто - то есть несколько ньансов) нет совершенно никакой необходимости создавать глобальную переменную. Хотя это случается ("создание глобальных переменных"), конечно же, не умышленно, а по каким-либо другим (неизвестным мне) причинам...
PM MAIL   Вверх
Zeroglif
Дата 8.1.2007, 20:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 644
Регистрация: 22.9.2005

Репутация: 28
Всего: 66



Цитата(solenko @  8.1.2007,  18:12 Найти цитируемый пост)
Кажется var используется как раз для создания локальных переменых.

Ключевое слово var обязательно используется для объявления переменной (любой). Строго говоря, если нет var, то нет и объявления переменной (это если не расширять термин "переменная" на всё подряд, а оставаться в рамках термина "variable" в ECMAScript). Что касается т.н. "как-бы вроде объявления" глобальной переменной без использования var, то в этом случае на выходе мы получим новое свойство глобального объекта. При "настоящем объявлении" мы тоже получаем новое свойство глобального объекта, отсюда и повелось считать эти две операции равнозначными, хотя на самом деле есть ключевые различия - разные атрибуты, разное время создания, разные глобальные объекты в IE и т.д., да и вообще это разные операции...

Локальность и глобальность каждый может понимать по-разному, в стандарте чёткого определения нет, есть только туманное разъяснение, что переменная или связана/определена "with function-local scope in that function" (читай, что локальна по отношению к своей функции), или связана/определена "with global scope" (читай, глобальна). В принципе, этого определения будет достаточно, если понимать, что такое объекты в лексическом окружении ("scope chain"), и как происходит разрешение идентификаторов ("identifier resolution") с учётом вложенных функций и прочих особенностей вроде "with" и т.п.  

Цитата(Aliance @  8.1.2007,  11:06 Найти цитируемый пост)
со всем согласен, почему так не понимаю

Максимально ограничивать область видимости и время жизни переменных - есть наиполезнейшее занятие, сводящее к минимуму всё плохое (наложение имён, ошибки и проч.). Кроме того, даже если кропотливо следить за глобальными переменными, всегда остаётся проблема оптимизации. Чем сильнее связана переменная, тем проще (быстрее) до неё добраться, простейший пример.

PM MAIL WWW   Вверх
vasac
Дата 8.1.2007, 21:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1060
Регистрация: 4.5.2006

Репутация: 13
Всего: 36



Цитата(Zeroglif @  8.1.2007,  20:59 Найти цитируемый пост)
разное время создания

Прошу прощения, а в чем это выражается?
PM WWW   Вверх
AKS
Дата 8.1.2007, 22:08 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Участник форума
**


Профиль
Группа: Участник
Сообщений: 725
Регистрация: 20.9.2006

Репутация: 27
Всего: 52



vasac
 
Цитата

в чем это выражается

В действиях, которые предпринимаются движком.
Zeroglif, согласитесь, как красноречиво описал Эрик вот здесь работу интерпретатора по данной теме - я читал и наслаждался!

P.S.
Пользуясь случаем, надо бы поблагодарить Zeroglif'a за хорошую тему - Ссылки на свежее/интересное/познавательное чтиво.. , а остальных призвать читать все то, что упомянутый участник форума любезно предоставляет в этой теме...


Это сообщение отредактировал(а) AKS - 8.1.2007, 22:35
PM MAIL   Вверх
Zeroglif
Дата 8.1.2007, 22:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 644
Регистрация: 22.9.2005

Репутация: 28
Всего: 66



Цитата(vasac @  8.1.2007,  21:36 Найти цитируемый пост)
Прошу прощения, а в чем это выражается?

Переменные (var-ы) создаются на "нулевой строке" со значением undefined. С 1-ой же строки к ним можно обращаться со всеми вытекающими. Свойства глобального объекта создаются в рантайм при условии, что им присваивается значение, только после этого к ним можно обращаться (это просто результат абстрактной операции PutValue, ES 8.7.2). Все реализации ECMAScript обязаны следовать этому, например, по ссылке, которую привёл AKS, поясняется, как именно это cделано в JScript.

Код

try{
    alert(x); // уже живёт со значением undefined
    alert(y); // нет в природе
} catch(e) {
    alert(e);
}
var x = 1;   // var x прочитано на "нулевой строке", а x=1 сейчас
y = 2;       // свойство глобального объекта появляется только сейчас

PM MAIL WWW   Вверх
Zeroglif
Дата 8.1.2007, 23:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 644
Регистрация: 22.9.2005

Репутация: 28
Всего: 66



Интересная весчь получается. Попробовал я ради интереса проверить, насколько медленнее обращение к глобальной переменной из глубин, если тупо увеличить число вложенных функций, допустим, до пяти. И получилось, что IE и Opera вполне адекватно и быстро работают (вложенность почти не влияет, т.к. объекты (кроме глобального), у которых ищется переменная - "пустые"), а gecko-браузеры (FF, SeaMonkey) странно тормозят... Это у меня одного так или подтвердите? Тест.
PM MAIL WWW   Вверх
Ответ в темуСоздание новой темы Создание опроса
Форум для вопросов, которые имеются в справочниках, но их поиск вызвал затруднения, или для разработчика требуется совет или просьба отыскать ошибку. Напоминаем: 1) чётко формулируйте вопрос, 2) приведите пример того, что уже сделано, 3) укажите явно, нужен работающий пример или подсказка о том, где найти информацию.
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0617 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.