【发布时间】:2014-09-21 04:15:55
【问题描述】:
下面是创建和附加 div HTML 对象的函数的代码 sn-p。该函数是从另一个函数调用的,该函数将附加元素附加到它。
我发现自己正在编写如下所示的类似代码。我知道必须有另一种更有效的方式来编写这段代码。我应该使用什么枯燥的设计模式?对象表示法是否更适合这样的事情?例子会很棒。
function create_element_container(){
var newElement = document.createElement('div'); //create container element
newElement.className = 'dropped'; //add classes to container element
var controllerContainer = document.createElement('div');
controllerContainer.className = 'drop-element-controls';
newElement.appendChild(controllerContainer);//Append controller container to main div
var controller_left = document.createElement('div');
controller_left.className = 'drop-move-controller';
controllerContainer.appendChild(controller_left);
var controller_left_move = document.createElement('div');
controller_left_move.className = 'drop-move';
controller_left.appendChild(controller_left_move);
var controller_left_icon = document.createElement('span');
controller_left_icon.className = 'fa fa-question fa-lg';
controller_left_move.appendChild(controller_left_icon);
controllerContainer.appendChild(controller_left); //Append controller Left
var controller_middle = document.createElement('div')
controller_middle.className = 'drop-sortable-controller';
controllerContainer.appendChild(controller_middle);
var controller_middle_sortable = document.createElement('div');
controller_middle_sortable.className = 'drop-sortable';
controller_middle.appendChild(controller_middle_sortable);
var controller_middle_icon = document.createElement('span');
controller_middle_icon.className = 'fa fa-arrows fa-lg';
controller_middle_sortable.appendChild(controller_middle_icon);
controllerContainer.appendChild(controller_middle); //Append controller Left
var controller_right = document.createElement('div')
controller_right.className = 'drop-remove-controller';
controllerContainer.appendChild(controller_right);
var controller_right_move = document.createElement('div');
controller_right_move.className = 'drop-remove';
controller_right.appendChild(controller_right_move);
var controller_right_icon = document.createElement('span');
controller_right_icon.className = 'fa fa-remove fa-lg';
controller_right_move.appendChild(controller_right_icon);
return newElement;
}
【问题讨论】:
-
别写那么多
var,这里有强迫症的人 -
@vsync:
vars 没有任何问题。 是奇怪的是看似随意的缩进,以及对controllerContainer.appendChild(controller_*)的双重调用 -
是的,它们有问题。其中不止一个。缩进也很明显。
-
大家好,感谢您的 cmets。我不认为 vars 有什么问题,用 var 声明一个新变量不是很好的做法吗?另外,对 controllerContainer 的双重调用是什么意思?这些调用是按顺序附加到元素的。下面的人确实列出了另一种去掉冗余的样式。 @vsync 你将如何编写函数/对象?
-
用最干净的解决方案查看我的答案。
标签: javascript function object design-patterns dry