Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Мини блиблиотека (https://javascript.ru/forum/misc/22687-mini-bliblioteka.html)

9xakep 28.10.2011 22:02

Мини блиблиотека
 
Хотел попробовать создать мини-мини библиотеку =) Она должна создавать элемент, в котором пользователь может выбрать тип элемента,и его имя.Где я допустил ошибку? :-?
<script type='text/javascript'>
function create(vid, imya)
{
        imya = document.createElement(vid); /*создать элемент, такого-то вида */
        imya.id = 'new' // дать id, созданному элементу new
}
create('div', 'newdiv'); //создаем этот элемент
var a = document.getElementById('new') 
alert(a) /*вызываем этот элемент(в качестве док-ва, что он созданн) */
</script>

В консоли когда вызываем переменную а, выдает null

9xakep 28.10.2011 22:33

1)
<script type='text/javascript'>
function create(type, name, el_id) {  
var name = document.createElement(type);
name.id = el_id 
document.body.appendChild(name)
}
create("div", newdiv, 'div');
var a = document.getElementById('div') 
alert(a)
</script>
Переделал, но все равно ничего не работает
2)комментарии при добавлении поста не влазили, поэтому перестраховался
3)исправил имена
4)"вариативное имя и статичный ид - противоречие" - что это значит?
5)хорошо, это ф-ия

vflash 28.10.2011 23:33

function create(name, id) {  
    var node = document.createElement(name);
    node.id = id 
    document.body.appendChild(node)
}
create('div', 'elemId');
var a = document.getElementById('elemId') 
alert(a)

Kolyaj 29.10.2011 10:21

9xakep,
вы хотите странного в плане указания имени переменной. Функция должна возвращать созданный элемент, а не пытаться его куда-то положить.

GuardCat 31.10.2011 09:32

Для удобства, иногда делаю что-то подобное. Но оно, обычно, выглядит так:

function toGiveBirth(el, parentId) {
	var created = document.createElement(el);
	if (arguments.length > 1) {
		document.getElementById(parentId).appendChild(el);
	}
	return (created);
}

И, иногда, так делаю тоже:
function kill (elId) {
	var el = document.getElementById(elId);
	return (el.parentNode.removeChild(el));
}

Kolyaj 31.10.2011 10:29

Цитата:

Сообщение от GuardCat
return (created);

А скобки зачем?

GuardCat 31.10.2011 10:42

Отвечая на вопрос. В первом варианте пропущен appendChild()
document.body.appendChild(imya);
внутрь функции добавьте третьей строкой.

Во втором вашем варианте newdiv возьмите в кавычки или объявите как переменную и всё заработает.

Да, теги script в этом случае должны располагаться внутри тегов body, чтобы работал метод document.body.appendChild();

GuardCat 31.10.2011 10:44

Цитата:

Сообщение от Kolyaj (Сообщение 133662)
А скобки зачем?

Привычка. Раз что-то передаётся привычнее видеть скобки. Это допустимая форма записи. Не комильфо?

Kolyaj 31.10.2011 10:48

Цитата:

Сообщение от GuardCat
Привычка. Раз что-то передаётся привычнее видеть скобки.

А привычка откуда взялась? Интересно, откуда они такие берутся.


Цитата:

Сообщение от GuardCat
Не комильфо?

В общем-то без разницы, можно ещё квадратными разбавить
return ([(created)])[0];

GuardCat 31.10.2011 11:06

Цитата:

Сообщение от Kolyaj
А привычка откуда взялась? Интересно, откуда они такие берутся.

Книга, с которой начинал изучать javascript (какая-то базовая справка не помню уже какая), содержала скобки у returna. В дальнейшем, почитав листинги других людей, удивился, что их (скобок) может не быть. Много читал про return. Думал. Но без скобок уже непривычно.


Часовой пояс GMT +3, время: 18:13.