Javascript-форум (https://javascript.ru/forum/)
-   Ваши сайты и скрипты (https://javascript.ru/forum/project/)
-   -   Китайский секрет от меня! (https://javascript.ru/forum/project/20999-kitajjskijj-sekret-ot-menya.html)

Solovei95 25.08.2011 13:09

Китайский секрет от меня!
 
Все люди мучаются над созданием элементов! (точнее создали, но нужны еще аттрибуты).
Но это в прошлом!

Теперь есть универсальный скрипт (китайский секрет от меня).

//перменная i в цикле означает название атрибута
//а переменная attr[i] означает значение атрибута

var DOMCreateElement = function(elem,attr){
  var element = document.createElement(elem);
  if(attr==null){attr={}}
  for(var i in attr){
    element.setAttribute(i,attr[i]);
  }
  return element;
};

var attributes = {
"src":"image.png"
}

var img = DOMCreateElement("img",attributes);


Все - создали элемент!

B@rmaley.e><e 25.08.2011 13:27

Цитата:

Сообщение от Solovei95
Все люди мучаются над созданием элементов!

Э? Что мучительно в двух строчках кода?
var element = document.createElement('…');
element.property = value;


Я уже не говорю о том, что все люди используют фреймворке, где это выглядит ещё проще.

melky 25.08.2011 13:52

Цитата:

Сообщение от Solovei95 (Сообщение 122354)
китайский секрет
if(attr==null){attr={}}

:haha: прошу MOOOREE китайских секретов

Solovei95 25.08.2011 16:00

Да вы не поняли!
Так можно много аттрибутов использовать!

var video = DOMCreateElement("video",{
"autoplay":"autoplay",
"loop":"loop",
"width":"100",
"height":"100",
"src":"video.ogv"
});

Kolyaj 25.08.2011 16:09

var video = document.createElement('video');
Object.mixin(video, {
    "autoplay":"autoplay",
    "loop":"loop",
    "width":"100",
    "height":"100",
    "src":"video.ogv"
})

Solovei95 25.08.2011 16:10

Че за Object.mixin ???

Solovei95 25.08.2011 16:12

Скажи что за фреймворк?

Kolyaj 25.08.2011 16:30

https://github.com/Kolyaj/CrossJS/bl...g/Object.js#L1

ваый 25.08.2011 16:33

Kolyaj, он сейчас подумает, что это реально штука из фреймворка, и так и не поймет, что это просто mixin, один из способов расширения/наследования объектов в языке, в котором нету классов. Надо было его отправить читать Стефанова.

Kolyaj 25.08.2011 16:37

Цитата:

Сообщение от ваый
один из способов расширения/наследования объектов в языке

Я бы не сказал, что это наследование. Просто очень нужная функция копирования свойств из одного объекта в другой.

ваый 25.08.2011 16:44

Ну да, все-таки копирование - не наследование.. неверно выразился

Riim 25.08.2011 17:03

Object.updateTree = function updateTree(obj, src) {
	if (obj == null) {
		obj = {};
	}
	for (var key in src) {
		if (typeof obj[key] == 'object' && typeof src[key] == 'object') {
			updateTree(obj[key], src[key]);
		} else {
			obj[key] = src[key];
		}
	}
	return obj;
};

var elem = Object.updateTree(document.createElement('div'), {
	style: {
		fontSize: '200%',
		cursor: 'pointer'
	},
	onclick: function() { alert('click!'); },
	innerHTML: 'click me'
});

document.body.appendChild(elem);

Solovei95 26.08.2011 06:47

Ну и секреты у вас!
Но вы тупо используете свойство:
elem[attr] = prop[attr];

Где:
attr - это сам атрибут
elem - элемент
prop - своство атрибута элемента

Solovei95 26.08.2011 07:12

Оказывает у вас мозга больше!
Но вот мой вариант.
Object.mix = function(obj,attr){
  if(obj==null){obj={}}
  if(attr==null){attr={}}

  for(var i in attr){
    obj[i] = attr[i];
  }
}


Но:

Object.mix = function(obj,attr){
  if(obj==null){obj={}}
  if(attr==null){attr={}}

  for(var i in attr){
    obj.setAttribute(i,attr[i]);
  }
}


Оригинальнее для DOM.

Solovei95 26.08.2011 07:16

Но для манипуляции со стилями:

Object.mix = function(obj,attr){
  if(obj==null){obj={}}
  if(attr==null){attr={}}

  for(var i in attr){
    obj.style.setProperty(i,attr[i],null);
  }
}

Есть такой - более верный вариант!

Solovei95 26.08.2011 07:17

Здесь: корректно работает "background-image" вместо "backgroundImage"

Solovei95 26.08.2011 08:07

Я прошу закрыть тему т.к. ни к чему хорошему это обсуждение не приведет! Одни пишут свое в ответ другому!

B@rmaley.e><e 26.08.2011 08:20

Цитата:

Сообщение от Solovei95
Одни пишут свое в ответ другому!

Вот ужас. Зато предыдущие 5 постов - образец правильной темы.

Solovei95 26.08.2011 08:48

1. Мы добавляем атрибуты в HTML элемент (подойдет в SVG).
2. Насчет CSS - то здесь все легко и просто, и даже кроссбраузерно.
3. Позаимствовал, зато работает в IE и других браузерах.

(function(window){

window.setAttributes = function(obj,src){
  if(obj==null){obj={}}
  if(src==null){src={}}
  for(var i in src){
    obj.setAttribute(i,src[i]);
  }
}

window.setStyles = function(obj,src){
  if(obj==null){obj={}}
  if(src==null){src={}}
  for(var i in src){
    if(typeof obj.style.setProperty != "undefined"){
      obj.style.setProperty(i,src[i],null);
    } else {
      obj.style.setAttribute(i,src[i]);
    }
  }
}

window.addEvent = function(obj, type, func) {
  if(obj.addEventListener) {
    obj.addEventListener(type, func, false);	
  }
  else 
  if(obj.attachEvent) {
    var f = function(e) {
      func.call(obj, e); 
    }
    obj.attachEvent('on' + type, f);
  }
}


})(window);

Solovei95 26.08.2011 09:52

Что говоря об SVG:

window.setAttributesNS = function(obj,ns,src){
  if(obj==null){obj={}}
  if(src==null){src={}}
  for(var i in src){
    obj.setAttribute(ns,i,src[i]);
  }
}

Octane 26.08.2011 15:29

Цитата:

Сообщение от Kolyaj
очень нужная функция копирования свойств из одного объекта в другой.

А этот в будущем стандартный метод, как Object.create?

B@rmaley.e><e 26.08.2011 15:32

Octane, нет.


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